启动 IntentService 的空指针异常 [英] Null Pointer exception starting IntentService

查看:38
本文介绍了启动 IntentService 的空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试启动一个 IntentService.当我这样做时,它会吐出这个:

I've got an IntentService that I'm trying to start. 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

我在谷歌上搜索了这个,并尽可能多地查看了类似的 StackOverflow 问题.但是,有一些细微的差异是我无法理解的.首先,异常中没有引用我的任何类.其次,类似的问题已通过更改上下文或双重检查以确保其不为空来解决.

I have googled this and looked at as many similar StackOverflow questions as I could find. 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)
        }
    });

}

我的 IntentService 模仿了 google 文档.只是一个带有 onHandleIntent 方法的构造函数.

My IntentService is modelled after the google docs. Simply a constructor with an onHandleIntent method.

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...
}

所以我的问题是:这个异常是从哪里来的,有什么我可以做的不同的事情来避免它吗?我的 google-fu 过去没有让我失望,所以希望这个不是那些令人痛苦的明显答案之一.此外,如果有些事情可以做得更好,或者只是很丑陋,我们总是很感激建设性的批评.

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. Also, if there are things that can be done better or are just plain ugly, constructive criticism is always appreciated.

我将完整的异常、NewsActivity 和 NewsService 放在 pastebin 上,以防我遗漏了一些东西.http://pastebin.com/mR9Sykrq

I put the full exception, NewsActivity, and NewsService on pastebin in case I left something out. http://pastebin.com/mR9Sykrq

推荐答案

如果您要覆盖 IntentService 中的 onCreate(),请确保您调用super.onCreate() 在里面.这很可能是您的问题.

If you're going to override onCreate() in your IntentService, then make sure you call super.onCreate() in it. That seems to quite likely be your problem.

这篇关于启动 IntentService 的空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆