Rob*_*Rob 2 java android asynchronous android-asynctask
我有一个包含一些数据的XML文件,所以我创建了一个代表它的类:
public class MyData
{
ArrayList<SpecialData> list;
int currentPage, totalPages;
}
Run Code Online (Sandbox Code Playgroud)
您可以猜测我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
我试了一下,问题不是来自这里,因为我正确地解析了我的XML文件,我的MyData对象是完美的.但后来我在我的主Activity类中使用这个任务:
MyData md = null;
GetXMLTask task = new GetXMLTask(this);
task.execute(new String[]{url});
// How can this change my md object?
Run Code Online (Sandbox Code Playgroud)
这可能非常愚蠢,但我根本不知道如何将我的MyData实例从我的主类链接到我得到的实例AsyncTask.我该怎么办?谢谢.
覆盖AsyncTask的onPostExecute方法:
protected void onPostExecute(MyData result) {
md = result;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这假设您的AsyncTask是您的活动的内部类.如果不是这种情况,您可以将构造函数中对Activity的引用传递给AsyncTask.在这些情况下,您应该小心使用WeakReference您的Activity来防止资源泄漏:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |