2015-06-21 59 views
-1

從onPostexecute()啓動活動我需要從AsyncTask的onPosExecute方法啓動另一個活動。 AsyncTask是一個獨立的類,不在任何活動類中。無法使用接口

我已經使用了一個接口來做到這一點。所述代碼包括:

這是onPostExecute()方法

@Override 
protected void onPostExecute(String json) { 
    Log.v("JSON", json); 
    Log.v("updateUI",""+updateUI); 
    updateUI.changeActivity(); 

} 

這是接口

public interface UpdateUIListener { 

public void changeActivity(); 
} 

而這正是該接口被實現活性類的部分

@Override 
public void changeActivity() { 
    Intent blah=new Intent(this,SplashActivity.class); 
    startActivity(blah); 
    finish(); 
}  

當我運行代碼時,出現空指針異常,在行

Intent blah=new Intent(this,SplashActivity.class); 

我的堆棧跟蹤是:

java.lang.NullPointerException 
     at android.content.ContextWrapper.getPackageName(ContextWrapper.java:135) 
     at android.content.ComponentName.<init>(ComponentName.java:75) 
     at android.content.Intent.<init>(Intent.java:3546) 
     at com.autofoyer.SignUpActivity.changeActivity(SignUpActivity.java:79) 
     at com.autofoyer.common.MyClientTask.onPostExecute(MyClientTask.java:73) 
     at com.autofoyer.common.MyClientTask.onPostExecute(MyClientTask.java:23) 
     at android.os.AsyncTask.finish(AsyncTask.java:631) 
     at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5099) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570) 
     at dalvik.system.NativeStart.main(Native Method) 

我需要知道是什麼原因造成,以及如何解決零點例外。我需要從onPostExecute方法開始並進行活動。提前致謝!

+0

顯示您的AsyncTask的完整代碼以及它如何從Activity/Fragment調用 – Viacheslav

回答

0

您可能實例化updateUInew SplashActivity()或類似。你不能那樣做。相反,您必須將Context傳入您的AsyncTask,然後使用它撥打startActivity()。您可能從Activity開始AsyncTask,因此在實例化AsyncTask時,只需將Activity作爲Context即可。

+0

我需要將asynctask用於許多活動,所以我不想將它放在一個活動中。 –

+0

非常感謝@ci_。我將該上下文傳遞給了asyncTask,並且做了這個訣竅。 –