ing*_*abh 7 android in-app-billing
我在我的应用程序中实现了inApp购买,但有时它给了我NPE,下面是堆栈跟踪.如果有兴趣的话,我也可以发布代码.
java.lang.RuntimeException: Unable to start service com.market.BillingService@48400380 with null: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
at android.app.ActivityThread.access$3600(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.market.BillingService.handleCommand(BillingService.java:369)
at com.market.BillingService.onStart(BillingService.java:359)
at android.app.Service.onStartCommand(Service.java:420)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
... 10 more
java.lang.NullPointerException
at com.market.BillingService.handleCommand(BillingService.java:369)
at com.market.BillingService.onStart(BillingService.java:359)
at android.app.Service.onStartCommand(Service.java:420)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
at android.app.ActivityThread.access$3600(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这里有相关的代码
@Override
protected void onStart() {
super.onStart();
ResponseHandler.register(mDungeonsPurchaseObserver);
}
@Override
protected void onStop() {
super.onStop();
ResponseHandler.unregister(mDungeonsPurchaseObserver);
}
@Override
protected void onDestroy() {
super.onDestroy();
mBillingService.unbind();
}
Run Code Online (Sandbox Code Playgroud)
在OnCreate()
mDungeonsPurchaseObserver = new WMBPurchaseObserver(mHandler);
mBillingService = new BillingService();
mBillingService.setContext(BuyModel.this);
ResponseHandler.register(mDungeonsPurchaseObserver);
Run Code Online (Sandbox Code Playgroud)
点击购买按钮
if (!mBillingService.checkBillingSupported())
{
showDialog(DIALOG_CANNOT_CONNECT_ID);
}
mBillingService.requestPurchase("android.test.purchased", null);
Run Code Online (Sandbox Code Playgroud)
Pra*_*nCG 12
在你的BillingService.java onStart方法中保护这样的null intent
if (null != intent) {
handleCommand(intent, startId);
}
Run Code Online (Sandbox Code Playgroud)
我相信这是由零意图引起的.试用!
我找到了解决这个问题的正确方法.那实际上取决于你如何看待它.如果您不希望在其进程被终止后重新启动服务,则需要覆盖onStartCommand并返回START_NOT_STICKY.像这样:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handleCommand(intent, startId);
return START_NOT_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
见START_NOT_STICKY.如果你确实想要在每次杀死服务时重新启动该服务,那么当前选择的答案就是你自己的答案,因为Android会在用null意图终止服务后重新启动你的服务.再次,请参阅我提供的链接.
哦,onStart已被弃用.
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |