При тестировании с android.test.purchased покупка работает хорошо, но при броске в игровой магазин она вылетает при завершении покупки.
Ниже приведен код для покупки завершен.
Это аварийный стек:
java.lang.NullPointerException:
at android.widget.Toast.<init> (Toast.java:171)
at android.widget.Toast.makeText (Toast.java:556)
at android.widget.Toast.makeText (Toast.java:514)
at com.py.reward.fragments.homefragment.onPurchasesUpdated (homefragment.java:321)
at com.android.billingclient.api.BillingClientImpl$1.onReceive (BillingClientImpl.java:136)
at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts (LocalBroadcastManager.java:303)
at com.android.billingclient.api.LocalBroadcastManager.access$000 (LocalBroadcastManager.java:44)
at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage (LocalBroadcastManager.java:114)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:7000)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1408)
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<com.android.billingclient.api.Purchase> purchases) {
if (responseCode == BillingClient.BillingResponse.OK
&& purchases != null) {
Toast.makeText(getActivity(), "Purchased", Toast.LENGTH_SHORT).show();
adddata();
for (com.android.billingclient.api.Purchase purchase : purchases) {
ConsumeResponseListener listener = new ConsumeResponseListener() {
@Override
public void onConsumeResponse(@BillingClient.BillingResponse int responseCode, String outToken) {
if (responseCode == BillingClient.BillingResponse.OK) {
// Handle the success of the consume operation.
// For example, increase the number of coins inside the user's basket.
Toast.makeText(getContext(), "Item Available for another purchase", Toast.LENGTH_SHORT).show();
}
}
};
mBillingClient.consumeAsync(purchase.getPurchaseToken(), listener);
}
} else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
// Handle an error caused by a user cancelling the purchase flow.
} else if (responseCode == BillingClient.BillingResponse.ITEM_ALREADY_OWNED) {
Toast.makeText(getContext(), "Purchase Limit Reached! Try again later", Toast.LENGTH_SHORT).show();
} else{
// Handle any other error codes.
}
}