【发布时间】:2017-07-24 08:42:58
【问题描述】:
我在 Fragment 中像这样启动 InAppBillingService
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent serviceIntent =
new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
getActivity().bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
}
每当我尝试购买商品时都会收到此错误
FATAL EXCEPTION: AsyncTask #6
Process: com.android.vending, PID: 15192
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: Attempt to read from field 'long com.google.wireless.android.finsky.dfe.nano.an.b' on a null object reference
at com.google.android.finsky.billing.lightpurchase.s.a(SourceFile:5)
at com.google.android.finsky.billing.lightpurchase.h.doInBackground(SourceFile:27)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
代码执行永远不会到达 mServiceConn 类。所以我猜我的代码首先无法启动服务。我做错了什么。
【问题讨论】:
-
您可以参考这个related post。它表示您遇到这些错误可能是因为您试图在
doInBackground()上显示某些内容。doInBackground在无法执行任何 UI 工作的工作线程中运行(包括显示 Toast,这就是您正在做的事情)。相反,所有 UI 工作都应该在onPostExecute()上完成。另外,请确保您的manifest.xml中有适当的permission。
标签: android google-play google-play-services in-app-billing