Я пытаюсь использовать Android In App Billing, следуя документам Google.Но я пытался использовать метод bindService для использования объекта InAppBillingService (mService).Возвращает true, но mService по-прежнему нулевой.вот мой код
открытый класс PaymentActivity расширяет AppCompatActivity {
IInAppBillingService mService;
ServiceConnection mServiceConn;
ArrayList<String> skuList;
Bundle querySkus;
Bundle skuDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_payment);
Log.d("payment", "isBillingAvailable? " + isBillingAvailable(this));
String chargeString = getIntent().getStringExtra("charge");
Log.d("intentTest", "charge is: " + chargeString);
mServiceConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d("Payment", "service disconnected!");
mService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
Log.d("Payment", "service connected!");
}
};
}
@Override
protected void onStart() {
super.onStart();
// Bind to IInAppBillingService
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
this.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
try{
while(mService == null){
Thread.sleep(1000);
Log.d("payment", "sleep 1 second");
}
}catch (InterruptedException e)
{
e.printStackTrace();
}
skuList = new ArrayList<String> ();
skuList.add("premiumUpgrade");
skuList.add("gas");
querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mService != null) {
unbindService(mServiceConn);
}
}
public static boolean isBillingAvailable(Context context) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
List<ResolveInfo> list = packageManager.queryIntentServices(intent, 0);
return list.size() > 0;
}
}
Я знаю, что это очень плохой код, потому что bindService вызывается в onCreate.Но я попробовал это на Асине, и никаких изменений не было.Я пытался дождаться завершения соединения с помощью спящего режима mainTread.Эта попытка превращает мое приложение в бесконечный цикл.
мое сообщение об ошибке
java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {kr.co.bigsapp.www / kr.co.bigsapp.www.activities.PaymentActivity}: java.lang.NullPointerException: попытка вызвать метод интерфейса 'android.os.Bundle com.android.vending.billing.IInAppBillingService.getSkuDetails (int, java.lang.String, java.lang.String, android.os.Bundle)' onнулевая ссылка на объект
Пожалуйста, помогите мне TT