启动 IntentService 的空指针异常

Posted

技术标签:

【中文标题】启动 IntentService 的空指针异常【英文标题】:Null Pointer exception starting IntentService 【发布时间】:2011-11-02 04:10:04 【问题描述】:

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

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

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

我有代码可以检查情况并非如此:

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 方法的构造函数。

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 过去没有让我失望,所以希望这个不是那些痛苦的显而易见的答案之一。此外,如果有些事情可以做得更好或者只是丑陋,我们总是会感谢建设性的批评。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

通常如果你在 Activity 中忘记了这一点,它会在它崩溃时提醒你,但显然不是在这里。【参考方案2】:

不确定是不是同样的问题,但我也使用了一个 intentService,但我在使用时遇到了问题

context = getApplicationContext();

或 上下文 = getBaseContext(); 我没有覆盖 onCreate 所以以前的解决方案可能是你的解决方案, 我在“onHandleIntent”里面工作

第一个会立即出现异常,稍后当我尝试使用第二个时会出现异常。

我最终意识到 Intentservice 本身就是 Context 的子类, 所以我在需要“上下文”实例的地方替换了“this”。

这解决了我的问题。

【讨论】:

面临与您相同的问题。非常感谢.. 你为我节省了很多时间 appContext Context appContext = getApplicationContext() 的值为空。

以上是关于启动 IntentService 的空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

片段中的空指针异常

使用 Eclipse 插件追加新谷歌的空指针异常

java中的空指针异常怎么解决

getGraphics() 上的空指针异常

getLatitude 上的空指针异常

异步任务的空指针异常