本文介绍了为什么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_PUR​​CHASE_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:

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异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 13:45