启动 IntentService 的空指针异常 [英] Null Pointer exception starting 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屋!