Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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
Java 应用内购买对话框未在android中显示_Java_Android_In App Purchase_In App Billing - Fatal编程技术网

Java 应用内购买对话框未在android中显示

Java 应用内购买对话框未在android中显示,java,android,in-app-purchase,in-app-billing,Java,Android,In App Purchase,In App Billing,我已经实现了应用内购买。问题是计费对话框billingClient.launchBillingFlow在某些设备中未显示。首先,我在安卓8中进行了测试,一切正常,但当我在安卓9中进行测试时,账单对话框没有显示出来。 这是密码 billingClient = BillingClient.newBuilder(this) .enablePendingPurchases() .setListener(this).build();

我已经实现了应用内购买。问题是计费对话框
billingClient.launchBillingFlow
在某些设备中未显示。首先,我在安卓8中进行了测试,一切正常,但当我在安卓9中进行测试时,账单对话框没有显示出来。 这是密码

billingClient = BillingClient.newBuilder(this)
                .enablePendingPurchases()
                .setListener(this).build();

        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

                    List<String> skuList = new ArrayList<>();
                    skuList.add(ITEM_SKU_diamond_500);
                    final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
                    billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
                        @Override
                        public void onSkuDetailsResponse(@NonNull BillingResult billingResult, List<SkuDetails> skuDetailsList) {
                            if (skuDetailsList != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                                for (SkuDetails skuDetails : skuDetailsList) {
                                    String sku = skuDetails.getSku();
                                    String price = skuDetails.getPrice();

                                    final BillingFlowParams params = BillingFlowParams.newBuilder()
                                            .setSkuDetails(skuDetails)
                                            .build();

                                    if (ITEM_SKU_diamond_500.equals(sku)) {
                                        premiumUpgradePrice = price;
                                        firstBtn500(params);

                                    }

                                    //clickHandler(skuDetails, sku);
                                }
                            } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ERROR) {
                                Toast.makeText(DiamondsActivity.this, "Error", Toast.LENGTH_SHORT).show();
                            }
                        }

                    });

                } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.SERVICE_TIMEOUT) {
                    Toast.makeText(DiamondsActivity.this, "Service timeout", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(DiamondsActivity.this, "Failed to connect to the billing client", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                Toast.makeText(DiamondsActivity.this, "Disconnected from the client", Toast.LENGTH_SHORT).show();
            }
        });

使用以下方法更新它:

 private void firstBtn500(final BillingFlowParams params) {
    
            firstPurchaseBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(DiamondsActivity.this, "OK: 1", Toast.LENGTH_SHORT).show();
    
       BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                                  .setSkuDetails(skuDetails)
                                  .build();
     int responseCode = billingClient.launchBillingFlow(activity, params);
    
                   
    
                }
            });
    
        }

我已经有了相同的代码。问题是“购买”对话框(包含商品名称和价格)未显示我也尝试了使用您的代码,但我仍然面临新答案的问题。我使用的是版本
3.0.0
<代码>setSku无法解决方法仍不工作的问题。我只在Android 9中面对这个问题。
 @Override
    public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {

        if (purchases != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

            for (Purchase purchase : purchases) {
                handlePurchases(purchase);
            }

        } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
            Toast.makeText(this, "Purchased Canceled", Toast.LENGTH_SHORT).show();
        }

    }
private void handlePurchases(final Purchase purchase) {

        if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
           
            // Todo :Consume the purchase async
            ConsumeParams consumeParams = ConsumeParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .build();

            ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
                @Override
                public void onConsumeResponse(BillingResult billingResult, @NonNull String purchaseToken) {

                    Toast.makeText(DiamondsActivity.this, "Purchase successful", Toast.LENGTH_SHORT).show();

                    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

                        if (purchase.getSku().equalsIgnoreCase(ITEM_SKU_diamond_500)) {
                            Toast.makeText(DiamondsActivity.this, "Thank you for purchasing!", Toast.LENGTH_SHORT).show();
                            handleAdditionOfData(500);
                        } 

                    }

                }
            };

            billingClient.consumeAsync(consumeParams, consumeResponseListener);


        } else if (purchase.getPurchaseState() == Purchase.PurchaseState.PENDING) {

            Toast.makeText(this, "Purchase pending", Toast.LENGTH_SHORT).show();

        }

    }
 private void firstBtn500(final BillingFlowParams params) {
    
            firstPurchaseBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(DiamondsActivity.this, "OK: 1", Toast.LENGTH_SHORT).show();
    
       BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                                  .setSkuDetails(skuDetails)
                                  .build();
     int responseCode = billingClient.launchBillingFlow(activity, params);
    
                   
    
                }
            });
    
        }