Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 消费购买导致对象引用为空_Android_In App Billing_Android Billing_Play Billing Library - Fatal编程技术网

Android 消费购买导致对象引用为空

Android 消费购买导致对象引用为空,android,in-app-billing,android-billing,play-billing-library,Android,In App Billing,Android Billing,Play Billing Library,计费流程成功启动,我收到了购买收据电子邮件 但是,当client.consumerasync(consumerparams,consumerresponseListener)时会发生致命错误被调用。 这是有问题的,因为这意味着购买尚未消费,无法再次购买 按钮点击: public void onClick5Handler(View view) { billingClient.launchBillingFlow(this, flowParams); } setupBill

计费流程成功启动,我收到了购买收据电子邮件
但是,当
client.consumerasync(consumerparams,consumerresponseListener)时会发生致命错误被调用。

这是有问题的,因为这意味着购买尚未消费,无法再次购买

按钮点击:

public void onClick5Handler(View view) {
        billingClient.launchBillingFlow(this, flowParams);
    }

setupBillingClient()是从onCreate()启动的,会导致成功连接:

public void setupBillingClient() {
        billingClient = BillingClient.newBuilder(this).setListener(this).enablePendingPurchases().setListener(this).build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    Toast.makeText(CoinsActivity.this, "success" + billingResult.getResponseCode(), Toast.LENGTH_SHORT).show();
                    queryProducts();

                } else
                    Toast.makeText(CoinsActivity.this, "failed" + billingResult.getResponseCode(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onBillingServiceDisconnected() {
                Toast.makeText(CoinsActivity.this, "you are disconnected from billing", Toast.LENGTH_SHORT).show();
                // Try to restart the connection on the next request to
                // Google Play by calling the startConnection() method.
            }
        });

    }

任何建议都将不胜感激。

我认为您的客户机未初始化或为空。正确地检查它或添加整个代码以帮助您。我已经添加了剩余的代码。客户端应替换为billingClient。它引用了相同的东西-billingClient。我注意到的问题是购买列表为空,但我仍然得到响应代码:7 error,这没有意义。在运行onPurchasesUpdated之前,是否需要以某种方式查询采购?
public void queryProducts() {
        List<String> skuList = new ArrayList<>();
        skuList.add(COINS_5);
        skuList.add(COINS_15);
        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);

        billingClient.querySkuDetailsAsync(params.build(),
                new SkuDetailsResponseListener() {
                    @Override
                    public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
                            for (SkuDetails skuDetails : skuDetailsList) {
                                String sku = skuDetails.getSku();
                                String price = skuDetails.getPrice();

                                flowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetailsList.get(0)).build();


                                if ("coins_5".equals(sku)) {
                                    coins5Price = price;
                                } else if ("coins_15".equals(sku)) {
                                    coins15Price = price;
                                }
                            }


                        }
                    }

                });
    }
    @Override
    public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {

        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
            for (Purchase purchase : purchases) {          
                handlePurchase(purchase);
            }

        } 

        else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {

        }

        else {   
             }
    }

    void handlePurchase(Purchase purchase) {

        if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
            // Grant entitlement to the user.

                ConsumeParams consumeParams = ConsumeParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .build();
                billingClient.consumeAsync(consumeParams, consumeResponseListener);

            }
        }