2013-04-16 10 views
5

私はコードテント常にnull onStartCommand

@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()); 

なぜ?私は上記の "インテント"変数がnullでないかどうかチェックしています。その場合、次のコードを実行します。しかし、私はまだnullpointerexceptionを持っています。

サービスはそのような活動から開始された:私は間違って何をやっている

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

+0

おそらくgetAction()はnullを返します。それを文字列でチェックしてみてください。 'String s = intent.getAction()。toString();'のようなもので、nullかどうかを確認してください。 – Wamasa

+0

私はこのサービスを開始するブロードキャストを持っているので、私は活動で開始されたサービスまたはブロードキャストで開始されたサービスを区別したいと思います。 –

+0

@Wamasa私は試しました。それでもnullpointerexceptionを返します。 getAction()を削除すると、サービスは正常に開始されます。 Wtf? –

答えて

12

intent.getAction()nullを返すように見えるので、NullPointerExceptionが届きます。

あなたはこれにあなたの小切手を拡張する必要があります。

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

あなたの意思にアクションを追加したい場合は、setAction()を呼び出す必要があります:

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

あなたの男。それは働いている。私は "if"チェックを延長する必要がありました。 –