java - 需要解释 : how to use AsyncTask?

标签 java android asynchronous android-asynctask

我有一个包含一些数据的 XML 文件,所以我创建了一个类来表示它:

public class MyData
{
    ArrayList<SpecialData> list;
    int currentPage, totalPages;
}

正如您所猜到的,我有一个 SpecialData 项目列表,每个项目都包含许多字段,并且 currentPage/totalPages 是两个唯一值在 XML 文件中。我需要异步获取和解析 XML 文件,所以我创建了这个类:

class GetXMLTask extends AsyncTask<String, Void, MyData>
{
    @Override
    protected MyData doInBackground(String... params)
    {
        MyData md = null;
        // Getting/parsing data
        return md;
    }
}

我试了一下,问题不是出自这里,因为我正确地解析了我的 XML 文件并且我的 MyData 对象是完美的。但是后来我在我的主要 Activity 类中像这样使用这个任务:

MyData md = null;
GetXMLTask task = new GetXMLTask(this);
task.execute(new String[]{url});
// How can this change my md object?

这可能非常愚蠢,但我根本不知道如何将我的 MyData 实例从我的主类链接到我通过 AsyncTask 获得的实例。我应该怎么办?谢谢。

最佳答案

覆盖AsyncTaskonPostExecute方法:

protected void onPostExecute(MyData result) {
     md = result;
 }

请注意,这假定您的 AsyncTask 是您 Activity 的内部类。如果不是这种情况,您可以将构造函数中对 Activity 的引用传递给 AsyncTask。在这些情况下,您应该小心地对 Activity 使用 WeakReference 以防止资源泄漏:

GetXMLTask(MyActivity activity)
{
    this.mActivity = new WeakReference<MyActivity>(activity);
}

protected void onPostExecute(MyData result)
{
     MyActivity activity = this.mActivity.get();
     if (activity == null) // Activity was destroyed due to orientation change, etc.
         return;
     activity.updateUiFromXml(result);
 }

关于java - 需要解释 : how to use AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15506244/

相关文章:

java - 如何在 JNA 中向 java 数组添加偏移量

java - 构造函数 Thread() 后面的代码如何工作?

java - Android ListView 未填充

android - Activity 关闭后服务停止工作, Activity 停止时调试器停止

c# - 使用 Microsoft 异步框架的基础知识

java - 使用 ICUTokenizer JAVA 标记泰语句子

java - 带列表的 HibernateTemplate 查询

java - Android 开发新手 : WebView usage

asynchronous - 如何管理 Dialogflow/Api.ai 中的 5 秒响应超时限制?

flutter - 在异步中等待而不是等待完成