Не могу понять как объявить productDetails (Cannot resolve symbol 'productDetails' )

введите сюда описание изображения

public class MainActivity2 extends AppCompatActivity implements PurchasesUpdatedListener {

    // Покупка

    private final Map<QueryProductDetailsParams.Product, ArrayList<QueryProductDetailsParams.Product>> mSkuDetailsMap = new HashMap<>();
    ProgressBar progressBar;

    public static final String PRODUCT_ID1 = "purchase111";
    public static final String PRODUCT_ID2 = "purchase222";


    private BillingClient billingClient;
    ConnectionDetector cd;
    private Vibrator Vibro;

    @Override
    protected void onDestroy() {
        super.onDestroy();

        { if (billingClient!=null)

        { billingClient.endConnection();
            Toast.makeText(MainActivity2.this, ("Служба отключена"), Toast.LENGTH_SHORT).show();}}

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        cd = new ConnectionDetector(this);

        TextView button1 = findViewById(R.id.button);
        TextView button2 = findViewById(R.id.button2);

        if (cd.isConnected()) {

            progressBar = findViewById(R.id.progressBar);
            progressBar.setVisibility(View.VISIBLE);
            TextView textView2 = findViewById(R.id.textView2);
            textView2.setVisibility(View.VISIBLE);


            button1.setClickable(false);
            button2.setClickable(false);


            purchase(null);
        }

        else
        { Toast.makeText(MainActivity2.this, (R.string.internet_not_activity), Toast.LENGTH_SHORT).show();

            button1.setClickable(false);
            button2.setClickable(false);



            new CountDownTimer(3000, 1) {

                public void onTick(long l)
                {}

                public void onFinish()
                {finish();}
            }.start();
        }

    }



    public void purchase(View view) {

        // Устанавливаем соединение с клиентом биллинга
        // проверяем статус покупки из кеша Google Play Store
        // чтобы проверить, был ли товар уже приобретен ранее или возвращен

        billingClient = BillingClient.newBuilder(this).enablePendingPurchases().setListener(this).build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
                billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {
                            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

                                if (list.size() > 0) {
                                    initiatePurchase();
                                    Toast.makeText(MainActivity2.this, ("Служба включена"), Toast.LENGTH_SHORT).show();
                                }}

                            else
                            { Toast.makeText(getApplicationContext(), "\n" + "Ошибка " + billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();}

                        }
                ));
            }


            @Override
            public void onBillingServiceDisconnected() { }
        });
    }



    private void initiatePurchase() {

        List<String> skuList = Arrays.asList(PRODUCT_ID1, PRODUCT_ID2);

        ArrayList<QueryProductDetailsParams.Product> productList = new ArrayList<>();
        for(String sku : skuList) {
            productList.add(
                    QueryProductDetailsParams.Product.newBuilder()
                            .setProductId(sku)
                            .setProductType(BillingClient.ProductType.INAPP)
                            .build()
            );
        }

        QueryProductDetailsParams params = QueryProductDetailsParams.newBuilder()
                .setProductList(productList)
                .build();

        billingClient.queryProductDetailsAsync(params, (billingResult, productDetailsList) -> {


            QueryPurchasesParams queryPurchasesParams = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
            billingClient.queryPurchasesAsync(queryPurchasesParams, (billingResult1, list) -> runOnUiThread(() -> {

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

                    for (QueryProductDetailsParams.Product skuDetails : productList) {
                        mSkuDetailsMap.put(skuDetails,productList);
                    }

                    progressBar.setVisibility(View.GONE);
                    TextView textView2 = findViewById(R.id.textView2);
                    textView2.setVisibility(View.GONE);

                    TextView button1 = findViewById(R.id.button);
                    TextView button2 = findViewById(R.id.button2);
                    button1.setClickable(true);
                    button2.setClickable(true);

                    vibro();


                    if (productList.size() <= 0)

                    {
                        // пытаемся добавить элемент / идентификатор продукта "покупка" внутри управляемого продукта в консоли Google Play
                        Toast.makeText(getApplicationContext(),"\n" + "Товар не найден",Toast.LENGTH_SHORT).show();
                    }}

                else
                { Toast.makeText(getApplicationContext(), " \n" + "Ошибка "+billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show(); }

            }));
        });
    }

    @Override
    public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        // если товар только что куплен
        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null)
        {
            handlePurchases(purchases);

        }


        // если покупка отменена
        else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED)
        {
            Toast.makeText(getApplicationContext(),"Покупка отменена",Toast.LENGTH_SHORT).show();
        }

    }


    void handlePurchases(List<Purchase>  purchases) {
        for(Purchase purchase:purchases) {
            //если товар куплен

            //////////////////////////////////////////////////////////////////////////////////////////////////////

            if (PRODUCT_ID1.equals(purchase.getProducts().get(0)) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)

            {

                // если товар куплен и не подтвержден

                if (!purchase.isAcknowledged()) {
                    AcknowledgePurchaseParams acknowledgePurchaseParams =
                            AcknowledgePurchaseParams.newBuilder()
                                    .setPurchaseToken(purchase.getPurchaseToken())
                                    .build();
                    billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
                }

                // иначе товар куплен и также подтвержден
                // Предоставление пользователю права на покупку товара


                payComplete1(null);


            }

            //////////////////////////////////////////////////////////////////////////////////////////////////////

            if (PRODUCT_ID2.equals(purchase.getProducts().get(0)) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED)

            {

                // если товар куплен и не подтвержден

                if (!purchase.isAcknowledged()) {
                    AcknowledgePurchaseParams acknowledgePurchaseParams =
                            AcknowledgePurchaseParams.newBuilder()
                                    .setPurchaseToken(purchase.getPurchaseToken())
                                    .build();
                    billingClient.acknowledgePurchase(acknowledgePurchaseParams, ackPurchase);
                }

                // иначе товар куплен и также подтвержден
                // Предоставление пользователю права на покупку товара


                payComplete2(null);


            }

        }

    }

    AcknowledgePurchaseResponseListener ackPurchase = billingResult -> {};


    public void  one(View view){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);

        ImmutableList productDetailsParamsList =
                ImmutableList.of(
                        BillingFlowParams.ProductDetailsParams.newBuilder()
                                // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
                                .setProductDetails(productDetails)
                                // to get an offer token, call ProductDetails.getSubscriptionOfferDetails()
                                // for a list of offers that are available to the user
                                .build()
                );

        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setProductDetailsParamsList(productDetailsParamsList)
                .build();

// Launch the billing flow
        BillingResult billingResult = billingClient.launchBillingFlow(this, billingFlowParams);

    }

    public void  two(View view){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);



    }

    public void payComplete1(View view)
    {    Toast.makeText(getApplicationContext(), "\n" + " payComplete1 - Товар куплен 1", Toast.LENGTH_SHORT).show();}

    public void payComplete2(View view)
    {    Toast.makeText(getApplicationContext(), "\n" + " payComplete2 - Товар куплен 2", Toast.LENGTH_SHORT).show();}


    public void vibro(){
        Vibro = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
        Vibro.vibrate(50);
    }

}

Ответы (0 шт):