Ошибка при повторной покупке монет

326
05 августа 2017, 03:18

У меня имеется список с разными количествами монет. Типа этого:

------------------------
10 монет         10руб.
------------------------
20 монет         20руб.
------------------------
30 монет         30руб.
------------------------

И это в диалоговом окне, то есть DialogFragment.

У меня не покупается, и при повторной попытке купить, выскакивает ошибка:

IabResult: Unable to buy item (response: 7:Item Already Owned)

Код:

в onCreateView вызываю setupBilling()

private void setupBilling() {
        mHelper = new IabHelper(getActivity(), CheckoutApplication.getPublicKey());
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    Log.d(TAG, "In-app Billing setup failed: " +
                            result);
                    try {
                        mHelper.queryInventoryAsync(mReceivedInventoryListener);
                    } catch (IabHelper.IabAsyncInProgressException e) {
                        e.printStackTrace();
                    }
                } else {
                    Log.d(TAG, "In-app Billing is set up OK");
                }
            }
        });
    }

При клике на пункт ListView вызываю метод buyCoins(String ProductID), с параметром ID продукта:

private void buyCoins(String name) {
        PRODUCT_NAME = name;
        try {
            mHelper.launchPurchaseFlow(getActivity(), PRODUCT_NAME, RC_REQUEST, mPurchaseFinishedListener);
        } catch (IabHelper.IabAsyncInProgressException e) {
            e.printStackTrace();
        }
    }

И остальные методы Хелпера:

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
        public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
            if (result.isFailure()) {
                Log.d(TAG, "error in mPurchaseFinishedListener: " + result);
            } else if (purchase.getSku().equals(PRODUCT_NAME)) {
                try {
                    mHelper.consumeAsync(purchase, mConsumeFinishedListener);
                } catch (IabHelper.IabAsyncInProgressException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
            if (result.isFailure()) {
                Log.d(TAG, "error in mReceivedInventoryListener: " + result);
            } else {
                for (CoinsPriceModel coinsPriceModel : coinsPriceModelList){
                    PRODUCT_NAME = coinsPriceModel.getName();
                    Purchase purchase = inventory.getPurchase(PRODUCT_NAME);
                    try {
                        mHelper.consumeAsync(purchase, mConsumeFinishedListener);
                    } catch (IabHelper.IabAsyncInProgressException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    };
    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {
        public void onConsumeFinished(Purchase purchase, IabResult result) {
            if (result.isSuccess()) {
                ToastUtils.shortToast(getActivity(), "SUCCESS in mConsumeFinishedListener");
            } else {
                Log.d(TAG, "error in mConsumeFinishedListener: " + result);
            }
        }
    };

Мучаюсь уже 2-й день. Погуглил, ни один вариант мне не помог. ЗЫ: Первый раз сталкиваюсь с IAB

Вопрос: Что я делаю не правильно, как исправить, подскажите???

READ ALSO
Закрепить позицию в ScrollView

Закрепить позицию в ScrollView

Возможно ли как то чтобы в разметке, содержащую ScrollView сделать так чтобы он не пролистывался вниз, дело в том что видимо какой то баг, при переходе...

272
Почему не считывает double переменные с консоли?

Почему не считывает double переменные с консоли?

С консоли нужно считать переменную типа double, затем умножить ее на 6, округлить в меньшую сторону, результат поместить в переменную типа int и вывести...

330
Android: выбор файла

Android: выбор файла

Нужно реализовать такую фишку: приложение просит выбрать в файлах изображение,с помощью установленных программ (например "Мои файлы"),чтобы...

286
Вылетает приложение при использовании setMyLocation

Вылетает приложение при использовании setMyLocation

Если использовать setMyLocationEnabled(true) и дать приложению разрешение на использование местоположения, то приложение просто вылетает при запуске

211