2013-04-16 2 views
5

Я следующий кодНамерение всегда нулевой 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()); 

Почему? Я проверяю выше, если переменная «намерение» не равна нулю. Если это так, выполните следующий код. Но у меня все еще было исключение nullpointer.

служба запускается от деятельности так:

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

Что я делаю неправильно?

+0

Возможно getAction() возвращает нуль. Попробуйте проверить его в строке. Что-то вроде 'String s = intent.getAction(). ToString();' и проверить, является ли его нулевым или нет. – Wamasa

+0

Потому что у меня также есть трансляция, которая запускает эту услугу, и я хотел бы различать начатую службу или службу, запущенную с трансляцией. –

+0

@Wamasa Я пробовал. Он по-прежнему возвращает исключение nullpointer. Если я удалю getAction(), сервис начнется нормально. Wtf? –

ответ

12

Вы получаете NullPointerException, потому что intent.getAction(), кажется, возвращает null.

Вы должны расширить свой чек на это:

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

Если вы хотите, чтобы добавить действие в своих намерениях необходимо вызвать setAction():

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

Ваш мужчина. Работает. Мне нужно было продлить мою проверку «если». –

Смежные вопросы