2014-10-04 3 views
0

У меня есть покупка в приложении для премиум-функций, которые в настоящее время при покупке вы будете редактировать общее предпочтение, которое дает вам премиальные функции. Мне бы хотелось, чтобы каждый раз, когда вы открывали приложение, он обнаруживал бы из игры Google, если пользователь приобрел премию, чтобы, если пользователь переключает устройства, им не придется покупать премию. Я полагаю, что для этого я должен был бы использовать «Запрос для купленных изделий» часть учебника Google здесь: http://developer.android.com/google/play/billing/billing_integrate.htmlПросить Google Play, если покупка в приложении была приобретена пользователем

ServiceConnection mServiceConn = new ServiceConnection() { 
     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mService = null; 
     } 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      mService = IInAppBillingService.Stub.asInterface(service); 
     } 
    }; 
    Intent serviceIntent = new Intent(
      "com.android.vending.billing.InAppBillingService.BIND"); 
    serviceIntent.setPackage("com.android.vending"); 
    bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); 
    try { 
     Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Код компилируется без ошибок, и если я удалить строку, чтобы получить расслоении Подержанный что приложение не будет аварийно завершено. Однако, если я попытаюсь получить информацию, которую приложение выйдет из строя. У меня есть код, показанный выше в методе onCreate(), и у меня есть mService и mServiceConn, введенные в верхней части java-файла. Благодарю.

ответ

0

bindService() - это асинхронная операция, означающая, что ваш mService почти наверняка будет пустым сразу после вызова bindService().

Вы должны ждать onServiceConnected() называться и вы получите правильный mService, прежде чем запрашивать для покупок - либо переместить try блок в onServiceConnected() или иметь, что в способе, который вызывается onServiceConnected().

+0

Спасибо, что у меня возникла проблема с неправильной асинхронной работой. – user3478306

+0

Если это помогло, убедитесь, что вы приняли ответ, чтобы удалить его из оставшейся без очереди очереди. – ianhanniballake

Смежные вопросы