2013-04-11 76 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