使用显式意图 NullPointerException 启动 Android IntentService
Starting Android IntentService with explicit intent NullPointerException
我正在尝试从主 activity 中的点击处理程序启动 IntentService
。我现在正在学习 Intents
,但还不太明白。我不确定我应该如何在此处实例化我的意图并将其传递给 startService
。我不知道为什么我必须做这样的事情,Intent
不会在我的服务中使用,据我所知。我不知道如何调试这个问题。
来自点击回调:
this.commute = new Commute();
locationService = new LocationService();
locationService.setCommute(commute);
// com.orm.SugarApp@8b2e18f is this.getApplicationContext() ...
Context context = this.getBaseContext();
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
System.out.println(context);
Intent intent = new Intent(context, LocationService.class);
System.out.println(locationService);
System.out.println(intent);
locationService.startService(intent); // <---- OFFENDING LINE
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@");
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
commute.start();
logcat 在回溯之前,none 个对象是 null
...:[=19=]
01-27 09:53:44.465 2718-2718/org.skyl.commutetracker I/System.out﹕ !!!!!!!!!!!!!!!!!!!!!
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ android.app.ContextImpl@8b2e18f
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ org.skyl.commutetracker.services.LocationService@387dcc1c
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ Intent { cmp=org.skyl.commutetracker/.services.LocationService }
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker D/AndroidRuntime﹕ Shutting down VM
01-27 09:53:44.481 2718-2718/org.skyl.commutetracker E/AndroidRuntime﹕ FATAL EXCEPTION: main
这会导致以下追溯:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.Context.startService(android.content.Intent)' on a null object reference
at android.content.ContextWrapper.startService(ContextWrapper.java:515)
at org.skyl.commutetracker.MainActivity.startCommute(MainActivity.java:86)
at org.skyl.commutetracker.MainActivity.toggleClick(MainActivity.java:67)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
您无需创建服务对象来启动它您只需使用 context
来启动它
Intent intent = new Intent(context, LocationService.class);
context.startService(intent);
您不想在第二行实例化 LocationService。
您可能希望使用以下其中一项:
context.bindService(intent, serviceConnection, boolean);
或
context.startService(intent);
对于您的 IntentService,您可能希望使用 startService。绑定服务不同于意图服务。
此外,如果您想将通勤传递到意图服务中,您可能希望将它作为额外的传递到意图中。
intent.putExtra(String key, Parcelable item)
putExtra 已重载,因此只要 Commute 对象实现所需接口之一,它就应该可以正常工作。有关 Intent 对象的更多信息,请访问 http://developer.android.com/reference/android/content/Intent.html
您可以在此处找到有关服务的更多信息http://developer.android.com/guide/components/services.html
我正在尝试从主 activity 中的点击处理程序启动 IntentService
。我现在正在学习 Intents
,但还不太明白。我不确定我应该如何在此处实例化我的意图并将其传递给 startService
。我不知道为什么我必须做这样的事情,Intent
不会在我的服务中使用,据我所知。我不知道如何调试这个问题。
来自点击回调:
this.commute = new Commute();
locationService = new LocationService();
locationService.setCommute(commute);
// com.orm.SugarApp@8b2e18f is this.getApplicationContext() ...
Context context = this.getBaseContext();
System.out.println("!!!!!!!!!!!!!!!!!!!!!");
System.out.println(context);
Intent intent = new Intent(context, LocationService.class);
System.out.println(locationService);
System.out.println(intent);
locationService.startService(intent); // <---- OFFENDING LINE
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@");
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
commute.start();
logcat 在回溯之前,none 个对象是 null
...:[=19=]
01-27 09:53:44.465 2718-2718/org.skyl.commutetracker I/System.out﹕ !!!!!!!!!!!!!!!!!!!!!
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ android.app.ContextImpl@8b2e18f
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ org.skyl.commutetracker.services.LocationService@387dcc1c
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker I/System.out﹕ Intent { cmp=org.skyl.commutetracker/.services.LocationService }
01-27 09:53:44.466 2718-2718/org.skyl.commutetracker D/AndroidRuntime﹕ Shutting down VM
01-27 09:53:44.481 2718-2718/org.skyl.commutetracker E/AndroidRuntime﹕ FATAL EXCEPTION: main
这会导致以下追溯:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.Context.startService(android.content.Intent)' on a null object reference
at android.content.ContextWrapper.startService(ContextWrapper.java:515)
at org.skyl.commutetracker.MainActivity.startCommute(MainActivity.java:86)
at org.skyl.commutetracker.MainActivity.toggleClick(MainActivity.java:67)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
您无需创建服务对象来启动它您只需使用 context
来启动它
Intent intent = new Intent(context, LocationService.class);
context.startService(intent);
您不想在第二行实例化 LocationService。
您可能希望使用以下其中一项:
context.bindService(intent, serviceConnection, boolean);
或
context.startService(intent);
对于您的 IntentService,您可能希望使用 startService。绑定服务不同于意图服务。
此外,如果您想将通勤传递到意图服务中,您可能希望将它作为额外的传递到意图中。
intent.putExtra(String key, Parcelable item)
putExtra 已重载,因此只要 Commute 对象实现所需接口之一,它就应该可以正常工作。有关 Intent 对象的更多信息,请访问 http://developer.android.com/reference/android/content/Intent.html
您可以在此处找到有关服务的更多信息http://developer.android.com/guide/components/services.html