NullPointer при запускеIntentSenderForResult, inappbilling V3

У меня есть следующие методы (которые отлично работают в первый раз):

public void TipUs(){ String sku="tip_us"; try { Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), sku, "inapp", "TIP_US"); PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); } catch (RemoteException e) { e.printStackTrace(); } catch (SendIntentException e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1001) { int responseCode = data.getIntExtra("RESPONSE_CODE", 0); String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE"); if (resultCode == RESULT_OK) { try { JSONObject jo = new JSONObject(purchaseData); String sku = jo.getString("productId"); } catch (JSONException e) { e.printStackTrace(); } } } } 

Если я попытаюсь снова использовать тот же метод (что должно быть возможно в соответствии с настройками в Google Play), я получаю следующую ошибку:

 java.lang.NullPointerException at com.appiclife.tipcal.Tip_Calculator.TipUs(Tip_Calculator.java:521) at com.appiclife.tipcal.Tip_Calculator.onClick(Tip_Calculator.java:350) at android.view.View.performClick(View.java:2485) at android.view.View$PerformClick.run(View.java:9080) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) at dalvik.system.NativeStart.main(Native Method) 

Кто-нибудь имеет ошибку, так как я использовал именно демо от Google, что я должен изменить?

EDIT: Похоже, что mService имеет значение null (хотя это было странно, он работал один раз, поэтому выглядит почти как проблема, если вы покупаете не один раз тот же элемент). У меня есть следующее:

Это мой код:

 OnCreate() Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE); 

А ТАКЖЕ:

 IInAppBillingService mService; ServiceConnection mServiceConn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("Test!"); mService = IInAppBillingService.Stub.asInterface(service); } public void onServiceDisconnected(ComponentName name) { mService = null; } }; 

OnServiceConnected никогда не вызывается. Я не видел этого в руководстве: http://developer.android.com/google/play/billing/billing_integrate.html

Но я попытался добавить следующий манифест в Манифест без результата (я его снова удалил, должен ли я объявить там службу):

 <service android:name="com.android.vending.billing.IInAppBillingService" /> 

Я столкнулся с той же проблемой. Вы должны ПОТРЕБИТЬ приобретенный предмет, прежде чем пользователь сможет снова приобрести тот же элемент SKU.

Когда вы настраиваете переменную buyIntentBundle, вы можете проверить RESPONSE_CODE. Если RESPONSE_CODE равен 7, то предыдущая покупка должна потребляться приложением.

Идентификаторы RESPONSE_CODE можно найти здесь: http://developer.android.com/google/play/billing/billing_reference.html#billing-codes

Запрос приобретенных товаров с использованием этого примера кода: http://developer.android.com/google/play/billing/billing_integrate.html#QueryPurchases

В INAPP_PURCHASE_DATA_LIST данные – это строка JSON с «purchaseToken». Передайте этот токен функции CONSUME.

После того, как вы ПОТРЕБИТЕ покупку, пользователь может ее снова купить.