我遇到一个问题,我需要从Android AsyncTask的onPostExecute()
方法访问我的Activity中的方法
我有2个活动都包含一个常用方法如下:
(1)活动1 - > refreshUI()
(2)活动2 ----> refreshUI()
我有一个AsyncTask
调用GetDataAsyncTask(Activity a )
,它将调用活动作为参数
现在,从我的活动1开始,我将致电新GetDataAsyncTask(Activity1.this).execute
与我的activity2相同,我将调用新的GetDataAsyncTask(Activity2.this).execute
。
我的AsyncTask如下:
public class GetDataAsyncTask extends AsyncTask<String ,Void , String> {
public Activity context;
public PostAsyncTaskHelper(Activity c) {
context = c;
}
protected String doInBackground(String... arg0) {
// Webservice calls
}
protected void onPostExecute(String result) {
if(result.equals("qq")) {
//Where I am not able to access refreshUI()
//method of any one of my activities
context.refreshUI()
}
}
}
任何人都可以帮助我如何从AsyncTask
答案 0 :(得分:5)
创建一个interface
方法refreshUI()
,并使Activity1和Activity2都实现它。然后,您只需要将context
类型转换为接口类型。
此外,您需要注意从Activity
内部保持对AsyncTask
的引用,因为在配置更改(如屏幕旋转)的情况下,您将坚持到一个被破坏的Activity实例。 See here了解详细信息,以及相应的example solution。
答案 1 :(得分:2)
定义活动的界面
public interface MyActivityRefreshInterface
{
public void refreshUI();
}
您的活动必须定义为implements MyActivityRefreshInterface
。
然后你的onPostExecute可以将上下文转换为(MyActivityRefreshInterface)上下文
答案 2 :(得分:1)
因为refreshUI不是Activity中的方法。它位于您的特定Acivity1和Activity 2类中,而不是Android中的Activity类。您应该重构,以便Activity1和Activity2从BaseActivity继承,并在其上使用refreshUI方法,并将AsyncTask中的上下文标记为BaseActivity