【问题标题】:unable to start activity from onPostexecute() using interface无法使用接口从 onPostexecute() 开始活动
【发布时间】:2015-06-21 11:15:04
【问题描述】:

我需要从 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();
}

这是实现接口的activity类的一部分

   @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 方法开始和活动。提前致谢!

【问题讨论】:

  • 显示你的 AsyncTask 的完整代码以及它是如何从 Activity/Fragment 调用的

标签: android interface android-asynctask


【解决方案1】:

您可能使用new SplashActivity() 或类似的方式实例化updateUI。你不能那样做。相反,您必须将 Context 传递给您的 AsyncTask 并使用它来调用 startActivity() 。您可能从一些Activity 开始AsyncTask,所以在实例化AsyncTask 时只需将Activity 作为Context 传递。

【讨论】:

  • 我需要将 asynctask 用于许多活动,所以我不想将它放在一个活动中。
  • 非常感谢@ci_。我将上下文传递给 asyncTask 并成功了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多