无法使用接口从onPostexecute()启动活动

时间:2015-06-21 11:15:05

标签: android interface android-asynctask

我需要从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方法启动和活动。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可能会使用updateUI或类似内容new SplashActivity()进行实例化。你不能这样做。相反,您必须将Context传递到AsyncTask并使用它来调用startActivity()。您可能从某些AsyncTask开始Activity,因此在实例化Activity时,只需将Context作为AsyncTask传递。