Исключение NullPointerException в IabHelper.queryPurchases

Сегодня я обнаружил отчет о сбое приложения для моего приложения Android, включающий следующую трассировку стека:

java.lang.NullPointerException: Attempt to invoke interface method 'android.os.Bundle com.android.vending.billing.IInAppBillingService.getPurchases(int, java.lang.String, java.lang.String, java.lang.String)' on a null object reference at com.myapp.utils.IabHelper.queryPurchases(IabHelper.java:878) at com.myapp.utils.IabHelper.queryInventory(IabHelper.java:572) at com.myapp.utils.IabHelper.queryInventory(IabHelper.java:545) at com.myapp.utils.IabHelper$2.run(IabHelper.java:645) at java.lang.Thread.run(Thread.java:818) 

(Номера строк изменены с оригинала или то, что похоже на оригинал , из-за пользовательского переформатирования)

Обычно можно изменить свой собственный код, чтобы проверить неназначенные члены класса. Проблема в том, что этот код скопирован и вставлен прямо из Android SDK, потому что IabHelper – это класс, который Android SDK обеспечивает в качестве хорошей отправной точки для внедрения In-app Billing v3

Виноватая линия – вторая

 logDebug("Calling getPurchases with continuation token: " + continueToken); Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken); 

Кажется, что служба не подключена во время вызова метода. Эта ошибка произошла на устройстве Nexus 5 (в соответствии с консолью разработчика)

  • Это известная проблема с Android 5?
  • Есть ли обновленная версия помощника IAB?
  • Что я могу сделать, а не вручную редактировать код для обработки NPE?

Я изменил этот код …

  do { logDebug("Calling getPurchases with continuation token: " + continueToken); Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken); // ... } 

Чтобы это было …

  do { logDebug("Calling getPurchases with continuation token: " + continueToken); if (mService == null || mContext == null) { logError("Our service and/or our context are null. Exiting."); return IABHELPER_UNKNOWN_ERROR; } Bundle ownedItems = mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken); // ... } 

Это почти наверняка, потому что процесс выполняется асинхронно, а активность / приложение закрывается (или закрывается) при возврате результата.

Intereting Posts
Отключите несколько пальцев в моем приложении Android: невозможно получить кликабельный заголовок / нижний колонтитул ListView Отображение нулевых значений после первого входа в систему внутри android Получите контактное имя с указанием номера телефона в Android Ошибка StrictMode $ AndroidBlockGuardPolicy.onNetwork Не удается найти android sdk 2.3.4 в менеджере SDK Разница между JSONObject и JSONArray BadParcelableException в коде Google Maps Ручной фокус настройки Android, касаясь Перейдите к другому EditText, когда Soft Keyboard Next нажата на Android Как удалить ненужные окна инструментов в Android Studio? Пропустить тест для конкретного варианта сборки в Android + Gradle? Есть ли что-нибудь еще, что я могу сделать, чтобы справиться с превышением лимита GC Overheaded с помощью Ant (Command Line)? Android – Как изменить элементы представления заголовка / нижнего колонтитула для существующего ListView? Как выбрать CBR vs VBR через API Android во время записи видео в приложении