问题描述
在我的 android 应用程序中,我有一个弹出 Activity,它出现在 MainActivity 前面,其中包含用户要购买的产品列表。当用户选择产品时 - 它调用 MainActivity.launchBilling(String skuId)
弹出活动:
recyclerViewDonate.addOnItemTouchListener(
new RecyclerItemClickListener(this,recyclerViewDonate,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view,int position) {
selectDonateSku = (String) list_sku_id.get(position);
MainActivity.launchBilling(selectDonateSku);
finish();
}
@Override public void onLongItemClick(View view,int position) {
selectDonateSku = (String) list_sku_id.get(position);
MainActivity.launchBilling(selectDonateSku);
finish();
}
})
);
主要活动:
public static void launchBilling(String skuId){
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setSkuDetails(mSkuDetailsMap.get(skuId))
.build();
billingClient.launchBillingFlow(instance,billingFlowParams);
};
有些时候我在生产报告中收到错误。它说应用程序在 BillingFlowParams 构建器上崩溃了。 我不明白这次失败的根本原因是什么。有人可以建议如何解决这个问题吗?
错误:
java.lang.IllegalArgumentException: at com.android.billingclient.api.BillingFlowParams$Builder.build(com.android.billingclient:billing@@3.0.0:23)
at com.nosik.ochoforecasts.MainActivity.launchBilling (MainActivity.java:1136)
at com.nosik.ochoforecasts.DonateActivity$1.onItemClick (DonateActivity.java:69)
at com.nosik.ochoforecasts.RecyclerItemClickListener.onInterceptTouchEvent (RecyclerItemClickListener.java:34)
at androidx.recyclerview.widget.RecyclerView.findInterceptingOnItemTouchListener (RecyclerView.java:3151)
at androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners (RecyclerView.java:3122)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent (RecyclerView.java:3283)
at android.view.View.dispatchTouchEvent (View.java:14376)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3857)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3535)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3863)
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3551)
at com.android.internal.policy.DecorView.superdispatchTouchEvent (DecorView.java:729)
at com.android.internal.policy.PhoneWindow.superdispatchTouchEvent (PhoneWindow.java:1922)
at android.app.Activity.dispatchTouchEvent (Activity.java:4051)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:687)
at android.view.View.dispatchPointerEvent (View.java:14644)
at android.view.ViewRootImpl$ViewPostImeInputStage.processpointerEvent (ViewRootImpl.java:6478)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:6265)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5703)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5756)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5722)
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5878)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5730)
at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5935)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5703)
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5756)
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5722)
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5730)
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5703)
at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:8862)
at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:8723)
at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:8676)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:8998)
at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:194)
at android.os.MessageQueue.nativePollOnce (Native Method)
at android.os.MessageQueue.next (MessageQueue.java:336)
at android.os.Looper.loop (Looper.java:197)
at android.app.ActivityThread.main (ActivityThread.java:7814)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1068)```
解决方法
"有人可以建议如何解决这个问题吗?"
答案:我们无法修复它,因为这是 billingclient 库的问题。已经上报google,归类为BUG,需要等待billingclient库的新版本(3.02以上)
点击 issuetracker 页面上的星星,让谷歌知道你也有这个问题: https://issuetracker.google.com/180032099