У меня есть IntentService, который я пытаюсь запустить. Когда я это сделаю, он выплевывает это:
java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.pec.testapp/.service.NewsService }: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2173)
... (omitted for brevity)
Caused by: java.lang.NullPointerException
at android.app.IntentService.onStart(IntentService.java:110)
at android.app.IntentService.onStartCommand(IntentService.java:118)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2160)
... 10 more
Я искал это и посмотрел на столько же вопросов StackOverflow, сколько мог найти. Тем не менее, есть несколько тонких различий, которые я не могу обвести вокруг себя. Прежде всего, в моем исключении нет ни одного из моих классов. Во-вторых, аналогичные вопросы были исправлены путем изменения контекста или двойной проверки, чтобы убедиться, что он не является нулевым.
У меня есть код, чтобы проверить, что это не так:
public Context context;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
context = getApplicationContext();
if(context == null)
Log.d("PECAPP","Context is null");
setContentView(R.layout.news_layout);
...Omit button code...
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view){
Intent i = new Intent(context, NewsService.class); // also tried NewsActivity.this
if( i != null) // I know that this should never happen but I'm at a loss...
startService(i); // I've also tried this with context.startService(i)
}
});
}
Мой IntentService моделируется после документов google. Просто конструктор с методом onHandleIntent.
public NewsService() {
super("NewsService");
}
...omit onCreate() and onDestroy() since they haven't been implemented yet...
@Override
protected void onHandleIntent(Intent intent) throws IllegalArgumentException {
Log.d("PECAPP","Got here..."); // I never actually got here...
if(intent == null) Log.d("PECAPP","INTENT IS NULL");
...omit rest of code...
}
Итак, мой вопрос таков: Откуда возникает это исключение, и есть ли что-то, что я могу сделать по-другому, чтобы избежать этого? Мой google-fu не подвел меня в прошлом, поэтому, надеюсь, это не является одним из этих болезненно очевидных ответов. Кроме того, если есть вещи, которые можно сделать лучше или просто уродливые, всегда ценится конструктивная критика.
Я поставил полное исключение, NewsActivity и NewsService на pastebin на случай, если я что-то оставил. http://pastebin.com/mR9Sykrq