Проблемы в использовании android-inapp-billing-v3

347
23 июля 2017, 09:31

Вот так вызываю покупку:

unlock_full_version.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            bp = BillingProcessor.newBillingProcessor(MainActivity.this, KEY, MainActivity.this);
            bp.initialize();
            boolean isSubscriptionUpdateSupported = bp.isSubscriptionUpdateSupported();
            if(isSubscriptionUpdateSupported) {
                bp.subscribe(MainActivity.this, "item");
            }else {
                Log.e("Doesn't support", "Error");
            }
        }
    });

Но на isSubscriptionUpdateSupported выдаёт NullPointerException. Что не так я делаю?

UPD

Process: me.pokerhelper, PID: 28178 java.lang.NullPointerException: Attempt to invoke interface method 'int com.android.vending.billing.IInAppBillingService.isBillingSupported(int, java.lang.String, java.lang.String)' on a null object reference at com.anjlab.android.iab.v3.BillingProcessor.isSubscriptionUpdateSupported(BillingProcessor.java:355) at me.pokerhelper.MainActivity$2.onClick(MainActivity.java:90) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22265) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

UPD

Сделал вот так:

bp = new BillingProcessor (MainActivity.this, KEY, MainActivity.this);
    unlock_full_version.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            buy();
        }
    });
...

public void buy(){
   bp.subscribe(MainActivity.this, "android.test.purchase");
}

Но теперь покупка совершается при первом запуске приложения без нажатия на кнопку :D

Answer 1

Библиотека в коробке не успела создать экземпляр класса для работы с Сервисом, мб и сам сервис ещё не запустился. В этой либе есть специальный callback, @Override public void onBillingInitialized() { /* * Called when BillingProcessor was initialized and it's ready to purchase */ }

который сигнализирует что Handler для работы готов попробуйте, перенести туда. А в целом инициализация такой тяжелой операции необходима предварительна в OnCreate например, а дальше менеджить все операции через Контроллеры.

Убедитесь также что ваш AIDL интерфейс настроен, в гугл семплс есть вполне рабочие варианты.

Answer 2
bp = BillingProcessor.newBillingProcessor(this, KEY, this);
    unlock_full_version.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            bp.initialize();
            buy();
        }
    });

Вот такой код сработал.

READ ALSO
Intelij Idea что значит включить все дебаги?

Intelij Idea что значит включить все дебаги?

Нужно помимо обычного дебага запустит еще и спринговый дебаг, как это сделать?

276
Изменить цвет заголовка в FlexDataGrid

Изменить цвет заголовка в FlexDataGrid

Добрый деньИспользую в своей программе визуальный элемент управления FlexDataGrid

390
Открывать окно с конкретной инфой

Открывать окно с конкретной инфой

Есть фрагмент, содержащий карту

312
Другой домен кука ли как быть Java EE

Другой домен кука ли как быть Java EE

Есть скриптОн подключается на другой сайт

354