Tengo un servicio de intención que intento iniciar. Cuando lo haga, se escupe esto:Excepción de puntero nulo que inicia el servicio de intención
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
Googled esto y mirado tantas preguntas StackOverflow similares que pude encontrar. Sin embargo, hay un par de diferencias sutiles que no puedo entender. Primero que nada, no hay ninguna de mis clases referenciadas en la excepción. En segundo lugar, se han solucionado preguntas similares cambiando el contexto o haciendo doble comprobación para asegurarse de que no sea nulo.
que tienen código para comprobar que no es el caso:
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)
}
});
}
Mi IntentService sigue el modelo de los documentos de Google. Simplemente un constructor con un método 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...
}
Así que mi pregunta es la siguiente: ¿Dónde está esta excepción viene y ¿hay algo que pueda hacer diferente para evitarlo? Mi google-fu no me ha fallado en el pasado, así que espero que esta no sea una de esas respuestas dolorosamente obvias. Además, si hay cosas que se pueden hacer mejor o simplemente son feas, siempre se agradece la crítica constructiva.
Pongo la excepción completa, NewsActivity y NewsService en pastebin en caso de que haya dejado algo. http://pastebin.com/mR9Sykrq
Por lo general, si olvida esto en, por ejemplo, una Actividad, le recordará cuando se cuelgue, pero aparentemente no está aquí. –
@Jarett Solo un ejemplo de las muchas maravillas de Android =] –
Gracias, y me funciona. – mxi1