将字符串值从一个异步任务传递到另一个异步任务

时间:2013-02-02 07:06:09

标签: android android-asynctask

我有2 AsyncTaskAsyncOneAsyncTwo。 在First AsyncTask背景方法中,我得到一个字符串值,并在onpostexecute。,

中进行设置

喜欢这个item = i.getname();

此处item是一个全局变量。

现在我将此项目值设置为AsyncTwo的onpostexecute方法,但我在那里得到null?

如何获取商品价值?

3 个答案:

答案 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