android-应用内结算:无法设置IAB Helper异常

我正在尝试使用Google Play中的静态产品ID设置应用内结算并进行测试.
正在关注开发人员教程here.
在labHelper对象上调用launhPurcahseFlow方法时,出现异常:

java.lang.IllegalStateException: IAB helper is not set up. Can’t
perform operation: launchPurchaseFlow at
com.android.vending.billing.IabHelper.checkSetupDone(IabHelper.java:782)

一直在搜索数小时,找不到有效的解决方案.
任何输入表示赞赏.

我的代码是:

protected void onCreate(Bundle savedInstanceState) {
        // Todo Auto-generated method stub
        super.onCreate(savedInstanceState);


           // compute your public key and store it in base64EncodedPublicKey
           mHelper = new IabHelper(this, base64EncodedPublicKey);

        // enable debug logging (for a production application, you should set this to false).
            mHelper.enableDebugLogging(true);


           //perform service binding to Google Bill ser and return ny errors with IabResult object and listener

            mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
                public void onIabSetupFinished(IabResult result) {
                    Log.d(TAG, "Setup finished.");

                    if (!result.isSuccess()) {
                        // Oh noes, there was a problem.
                        alert("Problem setting up in-app billing: " + result);
                        return;
                    }

                    // Have we been disposed of in the meantime? If so, quit.
                    if (mHelper == null) return;

                    // IAB is fully set up. Now, let's get an inventory of stuff we own.
                    Log.d(TAG, "Setup successful. Querying inventory.");
                    //mHelper.queryInventoryAsync(mGotInventoryListener);
                }
            });


           //ILLEgalSTAEEXCEPTION THROWN HERE

           mHelper.launchPurchaseFlow(this, testProduct, RC_REQUEST,   
                   new IabHelper.OnIabPurchaseFinishedListener() {
                       public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
                       {
                          if (result.isFailure()) {
                             Log.d(TAG, "Error purchasing: " + result);
                             return;
                          } 
                          else if (purchase.getSku().equals(testProduct)) {
                             // give user access to premium content and update the UI
                              //set the purchaesd booean to true


                            //when purcajsed add this code
                                editor.putBoolean("purchased", true);
                                editor.commit();
                                Toast.makeText(getApplicationContext(), "ADD FREE VERSION PURCAHSED!!!" +
                                        " Details OrderID: "+purchase.getorderId() +" Payload ID: "+purchase.mDeveloperPayload, Toast.LENGTH_LONG).show();
                                Log.d("CONNECT TO GOOGLE BILL", "ITEM PURCAHSED! : "+purchased);
                          }
                       }
                    }, "diveAppPurchase");





    }//onCreate
@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
            if (mHelper == null) return;

            // Pass on the activity result to the helper for handling
            if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
                // not handled, so handle it ourselves (here's where you'd
                // perform any handling of activity results not related to in-app
                // billing...
                super.onActivityResult(requestCode, resultCode, data);
            }
            else {
                Log.d(TAG, "onActivityResult handled by IABUtil.");
            }
        }

解决方法:

这对于像我这样第一次进行应用程序购买的人很有用.

设置调用是异步的,因此必须在调用launchPurchaseFlow之前完成.因此,我禁用了“购买”按钮以进行launchPurchaseFlow调用,设置调用完成后将启用该按钮.工作正常:

设定通话
           //将服务绑定到Google Bill ser,并使用IabResult对象和侦听器返回ny错误

        mHelper.startSetup(...)

如果成功,则启用按钮并调用mHelper.launchPurchaseFlow(…)方法

另外,当使用google提供的测试产品ID时,您可能会注意到在launchPurchaseFlow期间抛出了签名异常,但随后的结果失败,尽管交易成功,但这显然是Google已知的已知错误.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...