【问题标题】:Execute Async Tasks one after another一个接一个地执行异步任务
【发布时间】:2018-03-30 02:42:32
【问题描述】:

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

现在我尝试设置静态布尔变量以使整个工作正常,但到目前为止没有成功..

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;
}

}

编辑,代码:

【问题讨论】:

    标签: java android-asynctask android-volley


    【解决方案1】:

    当异步任务完成时,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
        }
    )
    

    【讨论】:

    • 我尝试了这个解决方案并检查它是否有效org.json.JSONObject.getString(java.lang.String)' 在空对象引用上。而且要么我调试错误,要么它没有跳转到 onPostExecute。
    • 对其进行了编辑,第一个是第一个任务的执行,我还会在每个任务完成后检查我是否通过 get 获得了对象,如果是,我开始一个新活动,第二张图片是第一个任务,第三个最后一个任务。
    • 您在条件“if(finish = true)”中有错误(应该是“if(finish == true) 或 if(finish)”)什么总是正确的所以它开始在循环使用未初始化的数据。但是当你初始化所有数据时,我会删除那个循环并在最后一个异步任务的 onPostExecute() 中运行代码。
    • 我像你说的那样改变了代码,谢谢你的帮助,但是当我调试时(也当我正常运行它时)它没有启动意图,当调试并试图跳过 looper.java 我不能比这更进一步:pic-upload.de/view-34123441/Capture.png.html 在我达到这一点后,调试器说“应用程序正在运行”,没有其他事情发生
    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多