一个接一个地执行异步任务

时间:2017-10-18 09:07:43

标签: java android-asynctask android-volley

我知道已经有一些讨论了,我在互联网上搜索了很多解决方案,我有3次接听电话(齐射)我想一个接一个地执行,因为下一次获取确实需要变量设置在在此之前得到但它似乎并没有在这里工作。当我调试整个过程时,它当然运行正常,但是当正常运行应用程序时,它并没有获得我在调试时得到的任何数据。

现在我尝试设置静态布尔变量来使整个事情发挥作用但是到目前为止还没有成功..

public class AsyncToken extends AsyncTask<String , Void, Void> {

private PacketBuilder pb = new PacketBuilder();
private Context context;
AsyncUser u = new AsyncUser(context);

@Override
protected Void doInBackground(String... params) {

    while( task1finished == false )
    {
        try
        {
            Log.d("App", "Waiting for GetTask");
            Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    Log.d("App", "GetTask finished");
    // Do what ever you like
    // ...
    pb.Get("token", "", params[0], context);

    return null;
}

protected void onPostExecute(String ... params)
{
    task2finished = true;

}

public AsyncToken(Context context)
{
    this.context = context;
}

}

编辑,代码: Code where i start the first asynctask, in the end i check if the object i should have gotten with get is there, if yes, i start another activity

first asynctask

last asynchtask

1 个答案:

答案 0 :(得分:2)

当异步任务完成时onPostExecute()被调用,因此在那里启动另一个具有计算值的异步任务。您可以拥有应该计算的全局变量,也可以通过参数传递它们。

//start first async task
new TaskOne().execute();


class TaskOne extends AsyncTask<Void,Void,String>{
    String tmp;


    @Override
    protected String doInBackground(Void... records) {
        tmp = computeNeededValue();

        return tmp;
    }

     @Override
    protected void onPostExecute(String result) {
        new TaskTwo().execute(tmp);
    }
)

class TaskTwo extends AsyncTask<String,Void,Void>{

    @Override
    protected Void doInBackground(String... records) {
        //use computed value from first task here 
    }

     @Override
    protected void onPostExecute(Void result) {
        //start another async task
    }
)