意图(Intent)始终为空的 onStartCommand 方法

5
我有以下代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(intent != null) {
        Log.i("INTENT", intent.getAction().toString());
    }
    return START_STICKY;
}

但是它总是在这一行返回 NullPointerException
Log.i("INTENT", intent.getAction().toString());

为什么会出现空指针异常?因为我在上面检查了“intent”变量是否为空。如果是这样,就执行以下代码。但是我仍然得到了空指针异常。

服务是从活动中启动的,如下所示:

startService(new Intent(this, MainService.class));

我做错了什么?

可能getAction()返回null。尝试将其检查在一个字符串中。 类似于String s = intent.getAction().toString();并检查它是否为null。 - Joao Guilherme
因为我还有启动此服务的广播,我希望区分是在活动中启动的服务还是通过广播启动的服务。 - Firefoxx Pwnass
@Wamasa 我试过了。它仍然返回nullpointerexception。如果我删除getAction(),服务就可以正常启动。这是怎么回事? - Firefoxx Pwnass
2个回答

14

您遇到了一个 NullPointerException,因为 intent.getAction() 返回了null

您应该将检查扩展到以下内容:

if(intent != null && intent.getAction() != null) {

如果您想将一个操作添加到您的意图中,您需要调用setAction()

Intent i = new Intent(this, MainService.class);
i.setAction("foo");
startService(i);

你真棒。它正在运行。我需要扩展我的“if”检查。 - Firefoxx Pwnass

0

我得到了类似的堆栈,添加检查

intent.getAction() != null

它运行成功了。

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.languoguang.welcomeapp, PID: 17676
              java.lang.RuntimeException: Unable to start service com.example.languoguang.welcomeapp.CountService@f6049d4 with Intent { cmp=com.example.languoguang.welcomeapp/.CountService }: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3698)
                  at android.app.ActivityThread.access$1500(ActivityThread.java:198)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1668)
                  at android.os.Handler.dispatchMessage(Handler.java:106)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6649)
                  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:826)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                  at com.example.languoguang.welcomeapp.CountService.onStartCommand(CountService.java:24)
                  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3679)
                  at android.app.ActivityThread.access$1500(ActivityThread.java:198) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1668) 
                  at android.os.Handler.dispatchMessage(Handler.java:106) 
                  at android.os.Looper.loop(Looper.java:164) 
                  at android.app.ActivityThread.main(ActivityThread.java:6649) 
                  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:826

我/进程:发送信号。PID:17676 SIG:9


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接