Android应用购买 - 第二次点击付费按钮 - 例外

时间:2016-01-18 09:38:51

标签: android

我在谷歌应用购买时遇到问题, 场景是当用户点击购买按钮启动谷歌购买弹出窗口,然后用户点击硬件返回按钮取消它,然后第二次当我们再次点击付款按钮时,它说错误

代码是:

  public void launchPayment() {
    try {
        PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
        int responseCode = buyIntentBundle.getInt("RESPONSE_CODE");
        String purchaseData = buyIntentBundle.getString("INAPP_PURCHASE_DATA");
        if (pendingIntent == null) {
            if (responseCode == 7) {
                Toast toast = Toast.makeText(WelcomeActivity.this, "You already owned this product", Toast.LENGTH_LONG);
                toast.show();
                updatePayOptions();
                paymentCallBack.paidCallBack(0);
            } else {
                Toast toast = Toast.makeText(WelcomeActivity.this, "Please sign in with your gmail account", Toast.LENGTH_LONG);
                toast.show();
            }
            return;
        }

        startIntentSenderForResult(pendingIntent.getIntentSender(),
                1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
                Integer.valueOf(0));

    } catch (Exception e) {
        e.printStackTrace();
    }
}

结果代码

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1001) {
        int responseCode = data.getIntExtra("RESPONSE_CODE", -1);
        String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
        String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
        ArrayList<String> itemList = data.getStringArrayListExtra("INAPP_PURCHASE_ITEM_LIST");
        if (resultCode == RESULT_OK) {
            try {
                JSONObject jo = new JSONObject(purchaseData);
                String sku = jo.getString("productId");
                if (sku.equalsIgnoreCase(productId)) {
                    updatePayOptions();
                    paymentCallBack.paidCallBack(0);
                }
                //  alert("You have bought the " + sku + ". Excellent choice,
                // adve//nturer!");
            } catch (Exception e) {
                //alert("Failed to parse purchase data.");
                e.printStackTrace();
            }
        }else if(requestCode == RESULT_CANCELED){
            paymentCallBack.paidCallBack(0);
        }
    }
}

错误是这样的:

     /? W/System.err: android.content.IntentSender$SendIntentException
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.app.Activity.startIntentSenderForResultInner(Activity.java:4149)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.app.Activity.startIntentSenderForResult(Activity.java:4120)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.app.Activity.startIntentSenderForResult(Activity.java:4087)
01-18 15:08:20.906 16465-16465/? W/System.err:     at com.pearson.skillsusa.ui.WelcomeActivity.launchPayment(WelcomeActivity.java:266)
01-18 15:08:20.906 16465-16465/? W/System.err:     at com.pearson.skillsusa.ui.fragments.WelcomeFragment$3.onClick(WelcomeFragment.java:90)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.view.View.performClick(View.java:5226)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.view.View$PerformClick.run(View.java:21266)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.os.Looper.loop(Looper.java:168)
01-18 15:08:20.906 16465-16465/? W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5845)
01-18 15:08:20.906 16465-16465/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
01-18 15:08:20.906 16465-16465/? W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
01-18 15:08:20.906 16465-16465/? W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

至于我在这个地方跟踪此错误startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));

然后第二次弹出窗口不来

有什么想法吗?请提出任何解决方案吗?

谢谢。

0 个答案:

没有答案