本文介绍了为什么Android的服务崩溃,并抛出NullPointerException异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面是code:
公共类BillingService有扩展服务实现ServiceConnection {
...
@覆盖
公共无效ONSTART(意向意图,诠释startId){
handleCommand(意向,startId); //线361
}
/ **
*在{@link BillingReceiver}将消息发送到意向使用这项服务。
*每个意图有一个动作和一些额外的参数具体行动。
*参数意图包含支持的行动之一的意图
*参数startId标识符为这个服务的调用实例
* /
公共无效handleCommand(意向意图,诠释startId){
串动= intent.getAction();
如果(Debug.Yes){
Log.i(TAG,handleCommand()动作:+动作);
}
如果(Consts.ACTION_CONFIRM_NOTIFICATION.equals(动作)){
的String [] notifyIds = intent.getStringArrayExtra(Consts.NOTIFICATION_ID);
confirmNotifications(startId,notifyIds);
}否则如果(Consts.ACTION_GET_PURCHASE_INFORMATION.equals(动作)){
字符串notifyId = intent.getStringExtra(Consts.NOTIFICATION_ID);
getPurchaseInformation(startId,新的String [] {notifyId});
}否则如果(Consts.ACTION_PURCHASE_STATE_CHANGED.equals(动作)){
字符串的signedData = intent.getStringExtra(Consts.INAPP_SIGNED_DATA);
特征码= intent.getStringExtra(Consts.INAPP_SIGNATURE);
purchaseStateChanged(startId,签名数据,签名);
}否则,如果(Consts.ACTION_RESPONSE_ code.equals(动作)){
长的requestId = intent.getLongExtra(Consts.INAPP_REQUEST_ID,-1);
INT响应codeINDEX = intent.getIntExtra(Consts.INAPP_RESPONSE_ code,
响应code.RESULT_ERROR.ordinal());
响应code响应code =响应code.valueOf(响应codeINDEX);
checkResponse code(的requestId,响应code);
}
}
下面是LogCat中:
了java.lang.RuntimeException:无法启动服务tv.kinobaza.billing.BillingService@45129a30与空:显示java.lang.NullPointerException
在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
在android.app.ActivityThread.access $ 3600(ActivityThread.java:125)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2096)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:123)
在android.app.ActivityThread.main(ActivityThread.java:4627)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:876)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
在dalvik.system.NativeStart.main(本机方法)
显示java.lang.NullPointerException:产生的原因
在tv.kinobaza.billing.BillingService.onStart(BillingService.java:361)
在android.app.Service.onStartCommand(Service.java:420)
在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
... 10更多
解决方案
我觉得最有可能的原因是因为意图
是空
。根据该文件<$c$c>onStartCommand$c$c>:
Here is the code:
public class BillingService extends Service implements ServiceConnection {
...
@Override
public void onStart(Intent intent, int startId) {
handleCommand(intent, startId); // line 361
}
/**
* The {@link BillingReceiver} sends messages to this service using intents.
* Each intent has an action and some extra arguments specific to that action.
* @param intent the intent containing one of the supported actions
* @param startId an identifier for the invocation instance of this service
*/
public void handleCommand(Intent intent, int startId) {
String action = intent.getAction();
if (Debug.Yes) {
Log.i(TAG, "handleCommand() action: " + action);
}
if (Consts.ACTION_CONFIRM_NOTIFICATION.equals(action)) {
String[] notifyIds = intent.getStringArrayExtra(Consts.NOTIFICATION_ID);
confirmNotifications(startId, notifyIds);
} else if (Consts.ACTION_GET_PURCHASE_INFORMATION.equals(action)) {
String notifyId = intent.getStringExtra(Consts.NOTIFICATION_ID);
getPurchaseInformation(startId, new String[] { notifyId });
} else if (Consts.ACTION_PURCHASE_STATE_CHANGED.equals(action)) {
String signedData = intent.getStringExtra(Consts.INAPP_SIGNED_DATA);
String signature = intent.getStringExtra(Consts.INAPP_SIGNATURE);
purchaseStateChanged(startId, signedData, signature);
} else if (Consts.ACTION_RESPONSE_CODE.equals(action)) {
long requestId = intent.getLongExtra(Consts.INAPP_REQUEST_ID, -1);
int responseCodeIndex = intent.getIntExtra(Consts.INAPP_RESPONSE_CODE,
ResponseCode.RESULT_ERROR.ordinal());
ResponseCode responseCode = ResponseCode.valueOf(responseCodeIndex);
checkResponseCode(requestId, responseCode);
}
}
Here is the LogCat:
java.lang.RuntimeException: Unable to start service tv.kinobaza.billing.BillingService@45129a30 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:876)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at tv.kinobaza.billing.BillingService.onStart(BillingService.java:361)
at android.app.Service.onStartCommand(Service.java:420)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
... 10 more
解决方案
I believe the most likely cause would be because intent
would be null
. According to the documentation for onStartCommand
:
这篇关于为什么Android的服务崩溃,并抛出NullPointerException异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!