Вот так вызываю покупку:
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
Библиотека в коробке не успела создать экземпляр класса для работы с Сервисом, мб и сам сервис ещё не запустился.
В этой либе есть специальный callback,
@Override
public void onBillingInitialized() {
/*
* Called when BillingProcessor was initialized and it's ready to purchase
*/
}
который сигнализирует что Handler для работы готов попробуйте, перенести туда. А в целом инициализация такой тяжелой операции необходима предварительна в OnCreate например, а дальше менеджить все операции через Контроллеры.
Убедитесь также что ваш AIDL интерфейс настроен, в гугл семплс есть вполне рабочие варианты.
bp = BillingProcessor.newBillingProcessor(this, KEY, this);
unlock_full_version.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bp.initialize();
buy();
}
});
Вот такой код сработал.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно помимо обычного дебага запустит еще и спринговый дебаг, как это сделать?
Добрый деньИспользую в своей программе визуальный элемент управления FlexDataGrid