在我的应用程序中,我正在开始这样的服务:
startService(new Intent(SplashScreen.this, GetContactService.class));
在启动服务之后我转到另一个活动,然后点击按钮,我就开始了这样的Asyctask:
class ABC extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
// my code snippet
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
// my code snippet
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//stopping the service which I have started earlier
stopService(new Intent(TelaSketchUtil.this, GetContactService.class));
}
}
但是在这里它运行正常直到在Background中运行,但是在Post Execute的stopService行中它给出了一个Null指针异常:
logcat的:
04-23 15:25:21.705: W/dalvikvm(26710): threadid=1: thread exiting with uncaught exception (group=0x2b547210)
04-23 15:25:21.715: E/AndroidRuntime(26710): FATAL EXCEPTION: main
04-23 15:25:21.715: E/AndroidRuntime(26710): java.lang.NullPointerException
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:127)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.content.ComponentName.<init>(ComponentName.java:75)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.content.Intent.<init>(Intent.java:3146)
04-23 15:25:21.715: E/AndroidRuntime(26710): at com.telasketch.misc.TelaSketchUtil$GetContactNumber.onPostExecute(TelaSketchUtil.java:225)
04-23 15:25:21.715: E/AndroidRuntime(26710): at com.telasketch.misc.TelaSketchUtil$GetContactNumber.onPostExecute(TelaSketchUtil.java:1)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.os.AsyncTask.finish(AsyncTask.java:602)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.os.AsyncTask.access$600(AsyncTask.java:156)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.os.Looper.loop(Looper.java:137)
04-23 15:25:21.715: E/AndroidRuntime(26710): at android.app.ActivityThread.main(ActivityThread.java:4448)
04-23 15:25:21.715: E/AndroidRuntime(26710): at java.lang.reflect.Method.invokeNative(Native Method)
04-23 15:25:21.715: E/AndroidRuntime(26710): at java.lang.reflect.Method.invoke(Method.java:511)
04-23 15:25:21.715: E/AndroidRuntime(26710): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
答案 0 :(得分:0)
您的TelaSketchUtil
课程似乎无效ContextWrapper
。
问题出现在ContextWrapper.getPackageName():
@Override
public String getPackageName() {
return mBase.getPackageName();
}
显然,mBase
值为空。
由于您没有为其发布代码,我最好的猜测是您的TelaSketchUtil
类直接扩展ContextWrapper
,并在构造函数中执行super(null)
。这将使你找到一个非常不可用的实例Context
arg。
它也可能是一些更微妙的问题,例如TelaSketchUtil
子类化推迟其ContextWrapper.mBase
初始化的内容,并在初始化之前运行onPostExecute()
代码。但是,这似乎不太可能,除非你做了一件非常奇怪的事情。