我有一个包含一些数据的 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
获得的实例。我应该怎么办?谢谢。
最佳答案
覆盖AsyncTask
的onPostExecute
方法:
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/