android - 无法从 Android AsyncTask 访问 Activity 的方法

标签 android android-layout android-intent android-emulator android-widget

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

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

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

我有一个 AsyncTask 调用 GetDataAsyncTask(Activity a ),它将调用 Activity 作为参数

现在,我将从我的 activity1 调用新的 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 中获取任何调用 Activity 的引用吗?

最佳答案

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

此外,您需要小心从 AsyncTask 中保存对 Activity 的引用,因为在配置更改的情况下(如屏幕旋转),您将保留一个已销毁的 Activity 实例。 See here详情及相应的example solution对此。

关于android - 无法从 Android AsyncTask 访问 Activity 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872212/

相关文章:

java - 使用 ACTION_CALL 的 Intent 调用 911 时移至拨号屏幕

android - 使用 PhoneGap 从 imageURI 获取 Base64

android - 如何创建 Android Material 设计 UI 小部件?

android - ListView 上的聊天气泡对齐

android - Android 中的清晰 View

安卓 : How to listen MediaPlayer event like music play/stop?

java - 安卓:setResult 不工作

java - 尝试在线程中显示 AlertDialog 时应用程序崩溃

java - 如何在Android中仅在特定时间段启用按钮?

android - * 守护进程没有运行。现在在端口 5037 上启动它 * ADB 服务器没有确认 * 无法启动守护进程 *