Mam następujące metody (które działa prawidłowo po raz pierwszy):NullPointer na startIntentSenderForResult, 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();
}
}
}
}
Gdyby spróbować ponownie użyć tej samej metody (co powinno być możliwe w zależności od ustawień w Google Play) Pojawia się następujący błąd:
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)
Czy ktoś ma błąd, ponieważ użyłem dokładnie wersji demonstracyjnej od Google, co powinienem zmienić?
EDYTOWANIE: Wygląda na to, że mService ma wartość null (choć dziwne jest to, że działało na raz, więc wygląda prawie jak problem, jeśli kupujesz więcej niż raz ten sam przedmiot). Mam następujący:
To jest mój kod:
OnCreate()
Intent("com.android.vending.billing.InAppBillingService.BIND"),
mServiceConn, Context.BIND_AUTO_CREATE);
I:
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 nigdy nie jest wywoływana. Nie widzę tego w instrukcji: http://developer.android.com/google/play/billing/billing_integrate.html
ale starałem się dodać następujące usługi manifest, bez rezultatu (usunąłem go ponownie, należy Oświadczam usługę tam?):
<service android:name="com.android.vending.billing.IInAppBillingService" />
'na com.appiclife.tipcal.Tip_Calculator.TipUs (Tip_Calculator.java:521)' Czym jest linia 521? – Sam
Hey Sam, \t startIntentSenderForResult (pendingIntent.getIntentSender(), – Diego
Nigdy nie używałem w aplikacjach rozliczeniowych, ale przypuszczam, że transakcja się nie powiodła (powinieneś sprawdzić kod odpowiedzi) – Sam