我有2 AsyncTask
,AsyncOne
和AsyncTwo
。
在First AsyncTask背景方法中,我得到一个字符串值,并在onpostexecute
。,
喜欢这个item = i.getname();
此处item
是一个全局变量。
现在我将此项目值设置为AsyncTwo的onpostexecute
方法,但我在那里得到null?
如何获取商品价值?
答案 0 :(得分:1)
你正在做的是你的代码和全局变量的东西,只要确保你的两个asyncTask不应该同时处于运行模式。在第一个postExecute()中启动第二个任务。
答案 1 :(得分:0)
当你启动异步任务2时,你必须确保asynctask 1已经完成。你可以将项目保存为asynctask 1中的字段,而不是可以在设置值时调用publishProgress,并在任务1的{{{}中启动asynctask 2 1}}。
答案 2 :(得分:0)
从您的描述中可以看出,您在后台运行了两个并发任务, task2 取决于 task1 的结果。由于它们同时运行, task2 可能会在 task1 之前完成,因此无法保证当 task2 完成时,它将获得<的结果<强> TASK1 强>
为了确保您可以同时运行两个任务,您可以同步 task1 的doInBackround()
方法,并在 task1中提供同步getItem()
方法强>:
// in task1
private Object item; // instance variable to be set in doInBackground
protected synchronized Object doInBackground(Object... objects) {
// set item to some value here
item = ...;
}
public synchronized Object getItem () {
return item;
}
// in task2
protected Object doInBackground(Object... objects) {
// do work of task2
....
// when finishing our work, ready to get the result of task1.
// we don't call task1.getItem() in onPostExecute() to avoid possibly blocking the UI thread
Object item = task1.getItem();
// pass item to the onPostExecute method
}
使用上面的代码, task2 将等待 task1 完成并获得结果,如果它的运行速度超过 task1 。