空指针异常@ stopService()

时间:2013-04-23 10:17:46

标签: android android-asynctask android-service

在我的应用程序中,我正在开始这样的服务:

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)

1 个答案:

答案 0 :(得分:0)

您的TelaSketchUtil课程似乎无效ContextWrapper

问题出现在ContextWrapper.getPackageName()

@Override
public String getPackageName() {
    return mBase.getPackageName();
}

显然,mBase值为空。

由于您没有为其发布代码,我最好的猜测是您的TelaSketchUtil类直接扩展ContextWrapper,并在构造函数中执行super(null)。这将使你找到一个非常不可用的实例Context arg。

它也可能是一些更微妙的问题,例如TelaSketchUtil子类化推迟其ContextWrapper.mBase初始化的内容,并在初始化之前运行onPostExecute()代码。但是,这似乎不太可能,除非你做了一件非常奇怪的事情。

相关问题