无法关闭PostExecute中调用的AlertDialog中的Activity

时间:2013-04-11 18:42:24

标签: android android-activity sdk android-asynctask alertdialog

我有几个活动都将文件发送到互联网。

我想将发布过程放入单独的类文件中,以便为每个活动调用相同的过程。

我将调用活动的上下文传递给主AsyncTask方法,该方法又调用preExecute,doInbackground,Postexecute。

我有一个AlertDialog,使用传递给AsyncTask的上下文构建,在postexecute方法中显示服务器返回的消息,并使用OnClickListener来关闭它。单击该按钮时,alertdialog将关闭,但基础活动屏幕不会。

我尝试了几种不同的finish()组合,包括: -

dialog.cancel();
finish();

dialog.cancel();
MyActivity ma = new MyActivity();
ma.this.finish();
但是,没有什么可以关闭活动。

我做错了什么,我需要做些什么才能让它关闭?

到目前为止,我能让它工作的唯一方法是在两个活动中嵌入完全相同的代码,这在我看来既低效又容易出错。

非常欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我将调用活动的上下文传递给主AsyncTask

而不是仅传递Activity的上下文,您需要将Activity实例传递给扩展AsyncTask类的类,因为finish方法来自Activity类而不是来自Context。所以尝试它为:

public class Networkasynctask extends AsyncTask<...>{

Activity activity;
Context context;

public Networkasynctask(Context context,Activity activity,...){
  this.activity=activity;
  .....
}
....
}

并从Activity:

传递Activity实例
Networkasynctask networktaskobj=new Networkasynctask(this);

现在使用Networkasynctask.this.activity.finish()来关闭非Activity类

中的Activity