0

我正在尝试将 Revenuecat 实施到我的应用程序中。当我尝试购买时出现此错误:

java.util.ArrayList 无法转换为 com.android.billingclient.api.SkuDetails

在这一行:Purchases.getSharedInstance().purchaseProduct(this, (SkuDetails) skuList, new MakePurchaseListener() {

我试图只购买一种产品。谁能帮我解决这个问题?他们的 sdk 参考在 Kotlin 中。我请求帮助他们没有帮助。

这是代码:

Show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           // relativeLayout.setVisibility(View.VISIBLE);
            List<String> skuList = new ArrayList<>();
            skuList.add(ITEM_S);


            Purchases.getSharedInstance().getNonSubscriptionSkus(skuList, new GetSkusResponseListener() {
                @Override
                public void onReceived(@NonNull List<SkuDetails> skus) {
                    makepurchase(skus);


                }

                @Override
                public void onError(@NonNull PurchasesError error) {

                }
            });






        }

    });




private void makepurchase(List<SkuDetails> skuList){

        Purchases.getSharedInstance().purchaseProduct(this, (SkuDetails) skuList, new MakePurchaseListener() {
            @Override
            public void onCompleted(@NonNull Purchase purchase, @NonNull PurchaserInfo purchaserInfo) {


                Toast.makeText(UserInformation.this,"Purchase complete",Toast.LENGTH_LONG).show();
            }

            @Override
            public void onError(@NonNull PurchasesError error, boolean userCancelled) {

            }
        });
    }
4

1 回答 1

2

首先,在onReceived您传递List<SkuDetails> skuList给期望的方法List<String>时 - 它应该是:

private void makepurchase(List<SkuDetails> skuList) {
}

然后,根据您的上下文,您应该遍历 skuList 并单独购买每个项目,或者修改签名Purchases.getSharedInstance().purchaseProduct以使用List<SkuDetails>

更新:迭代skuList以分别购买每个 skuItem。

负面影响:消息Purchase complete数量与 skuList 的大小一样多

  private void makepurchase(List<SkuDetails> skuList) {
    for (SkuDetails skuItem : skuList) {
      Purchases.getSharedInstance()
        .purchaseProduct(this, skuItem, new MakePurchaseListener() {
              @Override
              public void onCompleted(
                  @NonNull Purchase purchase, @NonNull PurchaserInfo purchaserInfo) {

                Toast.makeText(UserInformation.this, "Purchase complete", Toast.LENGTH_LONG).show();
              }

              @Override
              public void onError(@NonNull PurchasesError error, boolean userCancelled) {}
            });
      }
  }

于 2020-04-13T14:12:52.420 回答