无法将上下文从主活动传递到AsyncTask以显示AlertDialog - Android / Java

时间:2014-06-03 16:22:12

标签: java android constructor android-asynctask android-context

我试图使用onPostExecute / AsyncTask显示一个alertDialog(它是我自己的ActivityMain.java之外的类)但是我收到一条错误说明"构造函数AlertDialog。 Builder(AsyncTask)未定义。"

@Override
protected void onPostExecute(FunctionResult result) {
    if(result != null) {
        listener.callback(result);
    }
    else{

        Toast.makeText(c, "text", 1000).show();
        AlertDialog.Builder builder = new AlertDialog.Builder(
        AsyncTask.this);
        builder.show();
    }
}

在研究了这个问题后,我发现了这个:

Android : "The constructor AlertDialog.Builder(new View.OnClickListener(){}) is undefined" error

根据提供的答案,我似乎没有正确地将上下文从ActivityMain传递给我的AsyncTask类。

我尝试了实施:

AlertDialog.Builder builder = new AlertDialog.Builder(ActivityMain.this);

以及:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

如何正确传递上下文以避免此错误?

1 个答案:

答案 0 :(得分:2)

正如Raghunandan所说,只需在构造函数中传递它

class MyTask extends AsyncTask<...,..., FuncionResult> {
    Context mCtx;

    MyTask(Context ctx) {
        mCtx = ctx;
    }
    ...
   protected void onPostExecute(FunctionResult result) {
       ...
       Toast.makeText(mCtx, "text", 1000).show();
       AlertDialog.Builder builder = new AlertDialog.Builder(
    mCtx);
       builder.show();
   }
}

然后,如果活动被销毁(或更好地暂停),您需要小心取消任务,以避免泄漏并通知错误的活动/上下文