java .util.ArrayList нельзя преобразовать в com. android .billingclient.api.SkuDetails - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь внедрить выручку в мое приложение. Когда я пытался купить, я получаю эту ошибку:

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) {

            }
        });
    }

1 Ответ

2 голосов
/ 13 апреля 2020

Во-первых, в 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) {}
            });
      }
  }

...