我一直在开发一个应用程序,当它在内部类中时,我已经设法让 AsyncTask 正常工作。

现在,我正在重构代码,以便 AsyncTask 位于它自己的单独类中,但我想知道,一旦任务成功完成,我该如何终止 ProgressDialog 并启动一个新的 Activity?我已经尝试在 onPostExecute(..) 方法中启动一个新的 Activity,但我知道这行不通。

在 AsyncTask 的构造函数中将我的 UI 线程 Activity 作为参数传递似乎不起作用:

//In UI Thread I had
public class Test101 extends Activity {
    private Button btnLogin;
    private LoginTask mLoginTask;
    private Context context=this;
    private Test101 mTest101;

    mLoginTask=new LoginTask(context,mTest101);
    mLoginTask.execute(null);

    // In the AsyncTask I had
    Activity mParentActivity;

    public LoginTask(Context context,Activity act){
        this.ctx=context;
        this.mParentActivity=act;
    }

    onPostExecute(..){
        mParentActivity.callSomeMethod();
    }

    ...
}

我一直收到 NullPointerException ,也许我遗漏了一些东西,但这对我不起作用。

最佳答案

而不是传递 2 个参数只传递一个这样的:

public class Test101 extends Activity {
    private Button btnLogin;
    private LoginTask mLoginTask;

    mLoginTask=new LoginTask(this);
    mLoginTask.execute();
    //Instead of sending null put the 1st parameter of the AsyncTask as Void

异步任务代码:
  Activity mParentActivity;

public LoginTask(Activity act){
    this = act;
}

onPostExecute(..){
    ((Test101)mParentActivity).callSomeMethod();
}

关于外部类中的Android AsyncTask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2379233/

10-13 05:00