Java 使用显式意图NullPointerException启动Android IntentService
我正在尝试从主活动中的clickhandler启动一个Java 使用显式意图NullPointerException启动Android IntentService,java,android,android-intent,android-service,Java,Android,Android Intent,Android Service,我正在尝试从主活动中的clickhandler启动一个IntentService。我现在正在学习意图,但还不太明白。我不确定如何在这里实例化我的意图并将其传递给startService。我不知道我为什么要做这样的事情,据我所知,意图将不会在我的服务中使用。我不知道如何调试这个问题 从单击回调: this.commute = new Commute(); locationService = new LocationService(); locationService.se
IntentService
。我现在正在学习意图,但还不太明白。我不确定如何在这里实例化我的意图并将其传递给startService
。我不知道我为什么要做这样的事情,据我所知,意图将不会在我的服务中使用。我不知道如何调试这个问题
从单击回调:
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();
这将导致以下回溯:
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);
或
对于您的IntentService,您可能希望使用startService。绑定服务不同于意图服务
此外,如果您想将通勤信息传递到intent服务中,您可能希望将其作为额外信息传递到intent服务中
intent.putExtra(String key, Parcelable item)
putExtra是重载的,因此只要Communion对象实现了所需的接口之一,它就可以正常工作。有关Intent对象的更多信息,请访问
您可以在这里找到有关服务的更多信息那么,我如何将通勤
对象传递到位置服务
?那么,我如何将通勤
对象传递到位置服务
?在IntentService,您可以通过调用其中一个getExtra方法将通勤返回。关于意图的链接应该有可用的API。
context.startService(intent);
intent.putExtra(String key, Parcelable item)