2013-04-11 36 views
0

我有几个活动都将文件发送到互联网。无法关闭在PostExecute中调用的AlertDialog的活动

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

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

我有一个AlertDialog,使用传递给AsyncTask的上下文构建,在显示服务器返回的消息的postexecute方法中,使用OnClickListener关闭它。当按钮被点击时,alertdialog被关闭,但底层的活动屏幕没有。

我试图完成的几个不同的组合(),包括: -

dialog.cancel(); 
finish(); 

dialog.cancel(); 
MyActivity ma = new MyActivity(); 
ma.this.finish(); 

没什么,不过,将关闭活动。

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

到目前为止,我唯一能够实现它的唯一方法是在两个活动中嵌入完全相同的代码,这对我来说似乎既低效又容易出错。

任何帮助将是非常受欢迎的。

回答

1

我通过调用活动的背景下,主要的AsyncTask

,而不是只传活动的情况下,你需要到活动实例传递给类中扩展AsyncTask类,因为完成的方法是从Activity类,而不是从Context。所以尝试,因为:

public class Networkasynctask extends AsyncTask<...>{ 

Activity activity; 
Context context; 

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

,并通过活动实例从活动:

Networkasynctask networktaskobj=new Networkasynctask(this); 

现在使用Networkasynctask.this.activity.finish()用于关闭活动从非活动类

+0

谢谢你这么快作出反应。 – 2013-04-11 21:11:29

+0

我尝试了你的建议,并没有什么区别(但我可能误解了你的建议。什么是networktaskobj的hte意义,因为我看不到在任何地方使用? – 2013-04-11 21:29:27

+0

好吧,我现在已经知道了工作!我不完全确定我做了什么,但我认为这是与在主类文件的其他地方用于上下文和活动的相同变量名称有关的。无论如何,非常感谢解决方案。 – 2013-04-12 12:49:39