简体   繁体   English

启动IntentService的空指针异常

[英]Null Pointer exception starting IntentService

I've got an IntentService that I'm trying to start. 我有一个我正在尝试启动的IntentService。 When I do, it spits out this: 当我这样做时,它会吐出这个:

java.lang.RuntimeException: Unable to start service com.pec.testapp.service.NewsService@406bd940 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

I have googled this and looked at as many similar StackOverflow questions as I could find. 我已经搜索了这个,并查看了尽可能多的类似StackOverflow问题。 However, there are a couple of subtle differences that I can't wrap my head around. 然而,有一些微妙的差异,我无法解决。 First of all, there aren't any of my classes referenced in the exception. 首先,异常中没有引用任何类。 Secondly, similar questions have been fixed by changing the context or double checking to make sure it's not null. 其次,通过更改上下文或双重检查来确定类似的问题,以确保它不为空。

I have code to check that isn't the case: 我有代码来检查是不是这样:

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)
        }
    });

}

My IntentService is modelled after the google docs. 我的IntentService是在google docs之后建模的。 Simply a constructor with an onHandleIntent method. 只是一个带有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...
}

So my question is this: Where is this exception coming from and is there something I can do different to avoid it? 所以我的问题是: 这个异常来自哪里,有什么我可以做的不同以避免它? My google-fu hasn't failed me in the past, so hopefully this isn't one of those painfully obvious answers. 我的google-fu在过去并没有让我失望,所以希望这不是那些痛苦明显的答案之一。 Also, if there are things that can be done better or are just plain ugly, constructive criticism is always appreciated. 此外,如果有些事情可以做得更好或者只是丑陋,那么建设性的批评总是受到赞赏。

I put the full exception, NewsActivity, and NewsService on pastebin in case I left something out. 我把完整的异常,NewsActivity和NewsService放在了pastebin上,以防我遗漏了一些东西。 http://pastebin.com/mR9Sykrq http://pastebin.com/mR9Sykrq

If you're going to override onCreate() in your IntentService , then make sure you call super.onCreate() in it. 如果您要在IntentService覆盖onCreate() ,请确保在其中调用super.onCreate() That seems to quite likely be your problem. 这似乎很可能是你的问题。

Not sure if it is the same problem, but I was using an intentService also, and I was having trouble using 不确定它是否是同一个问题,但我也使用了intentService,而我在使用时遇到了麻烦

context = getApplicationContext();

or context = getBaseContext(); 或context = getBaseContext(); I wasn't overriding onCreate so the previous solution may be the solution for you, I was working inside "onHandleIntent" 我没有压倒于创建所以以前的解决方案可能是你的解决方案,我在“onHandleIntent”里面工作

I would get an immediate exception with the first, and a exception later when I tried using the 2nd. 我会在第一个时获得一个立即异常,而在我尝试使用第二个时会出现异常。

I ended up realizing that the Intentservice is itself a subclass of Context, so I substituted "this" wherever I needed an instance of "Context". 我最终意识到Intentservice本身就是Context的子类,所以我在需要“Context”实例的地方替换了“this”。

This solved my problem. 这解决了我的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM