Java 使用显式意图NullPointerException启动Android IntentService

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

我正在尝试从主活动中的clickhandler启动一个
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)