1

我有一个问题,我需要从 Android AsyncTask 的方法访问我的 Activity 中的onPostExecute()方法

我有 2 个活动都包含一个通用方法,如下所示:

(1) Activity1 --> refreshUI()
(2) Activity2 ----> refreshUI()

我接到一个AsyncTask电话GetDataAsyncTask(Activity a ),它把调用活动作为参数

现在从我的活动 1 我将调用 new GetDataAsyncTask(Activity1.this).execute
与我的 activity2 相同,我将调用 new 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吗?

4

3 回答 3

5

制作一个interface具有方法的refreshUI(),并使 Activity1 和 Activity2 都实现它。然后,您只需将类型转换context为接口的类型。

此外,您需要小心在 anActivity内部持有对 an 的引用AsyncTask,因为在配置更改(如屏幕旋转)的情况下,您将持有已销毁的 Activity 实例。有关详细信息,请参见此处,以及相应的示例解决方案

于 2012-08-08T20:05:14.493 回答
2

为您的活动定义一个接口

public interface MyActivityRefreshInterface
{
 public void refreshUI();
}

您的活动必须定义为implements MyActivityRefreshInterface.

您的 onPostExecute 然后可以将上下文转换为 (MyActivityRefreshInterface)context

于 2012-08-08T20:07:25.633 回答
1

因为 refreshUI 不是 Activity 中的方法。它在您特定的 Activity1 和 Activity 2 类中,而不是来自 Android 的 Activity 类。您应该重构 Activity1 和 Activity2 以从具有 refreshUI 方法的 BaseActivity 继承,并将 AsyncTask 中的上下文标记为 BaseActivity

于 2012-08-08T20:07:03.100 回答