2013-04-23 150 views
0

在我的應用我開始一個服務是這樣的:空指針異常@ stopService()

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)); 
    } 
} 

但在這裏它,直到做背景,但在郵政stopService行執行它運行良好給出了一個空指針異常如:

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

檢查這個類TelaSketchUtil.java行號:225 ans顯示我們SplashScreen.java代碼... – 2013-04-23 10:20:21

+0

@DhawalSodha是的,這是在停止服務後崩潰方法。但是我的問題依然如此。 – 2013-04-23 10:22:45

+0

檢查服務是否啓動? TelaSketchUtil.java中的行號是225? – 2013-04-23 10:27:44

回答

0

看來你TelaSketchUtil類是無效的ContextWrapper。發生在ContextWrapper.getPackageName()

問題:

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

顯然,mBase值爲空。

由於您沒有發佈代碼,我最好的猜測是您的TelaSketchUtil類直接擴展了ContextWrapper,並且在構造函數中做了super(null)。這會給你一個很難用作Context arg的例子。

它也可能是一些更微妙的問題,如TelaSketchUtil繼承其初始化的東西,其中代碼在初始化之前運行。但是,這對我來說似乎不太可能,除非你做的事很奇怪。