外部类中的Android AsyncTask

jwe*_*nga 4 android asynchronous android-asynctask

我一直在研究一个应用程序,并且我已经设法AsyncTask让它在内部类中工作正常.

现在,我正在重构代码,以便AsyncTask它自己在一个单独的类中,但我想知道,ProgressDialog一旦任务成功完成,我如何杀死并启动一个新的Activity?我已尝试在onPostExecute(..)方法中启动一个新的Activity ,但我知道这不起作用.


将我的UI线程活动作为参数传递给AsyncTask的构造函数似乎不起作用:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

我不断得到一个NullPointerException,也许我错过了一些东西,但这对我不起作用.

net*_*ein 7

而不是传递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
Run Code Online (Sandbox Code Playgroud)

AsyncTask代码:

  Activity mParentActivity;

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

onPostExecute(..){
    ((Test101)mParentActivity).callSomeMethod();
}
Run Code Online (Sandbox Code Playgroud)


jwe*_*nga 6

所有人都需要启动一个新的Activity是你在以下构造函数中传递的上下文对象AsyncTask:

private Context ctx;
private ProgressDialog pDialog;
private String r="";

public LoginTask(Context context){
    super();
    this.ctx=context;
}

@Override
protected void onPostExecute(String result) {
    Log.i("LOGGER", "Done...");
    pDialog.dismiss();
    Intent i=new Intent(ctx,SillyActivity.class);
    ctx.startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

如果你在构造函数中传递活动AsyncTask并尝试调用startActivity(Intent intent),则总会得到一个空指针异常.