2012-06-20 40 views
0

在我的应用程序,当点击登录页面登录,我要叫3层的API。我有3个AsyncTask来做这个要求。我正在做的是在第一个任务onPostExcecute()内调用第二个任务,第二个任务在onPostExecute()内部调用第三个任务。调用的AsyncTask创建延迟

TASKA样子:

private class TaskA extends AsyncTask<Void, Void, ListA> { 

    @Override 
    protected void onPreExecute() { 

    } 

    @Override 
    protected ListA doInBackground(Void... params) { 
     ListA listA;//its an arraylist   

     listA = //calling my API 

     if(listA != null) { 
      //writing listA as serialized into sdcard. 
     } 

     return listA; 
    } 

    @Override 
    protected void onPostExecute(ListA listA) { 
     for(ListAValues value : listA) { 
      new TaskB().execute(value);    
     } 
    } 
} 

TaskB:

private class TaskB extends AsyncTask<ListA, Void, ListB> { 

    @Override 
    protected void onPreExecute() { 

    } 

    @Override 
    protected ListB doInBackground(ListA... params) { 
     ListB listB;//its an arraylist   

     listB = //calling my API 

     if(listB != null) { 
      //writing listB as serialized into sdcard. 
     } 

     return listB; 
    } 

    @Override 
    protected void onPostExecute(ListB listB) { 
     new TaskC().execute(listB); 
    } 
} 

TaskC:

private class TaskC extends AsyncTask<ListB, Void, ListC> { 

    @Override 
    protected void onPreExecute() { 

    } 

    @Override 
    protected ListC doInBackground(ListB... params) { 
     ListC listC;//its an arraylist   

     listC = //calling my API 

     if(listC != null) { 
      //writing listC as serialized into sdcard. 
     } 

     return listC; 
    } 

    @Override 
    protected void onPostExecute(ListC listC) { 
     //moving to my landing page. 
    } 
} 

的问题是在登陆页面,屏幕与黑,白三色闪烁。 (白色是我的着陆页活动的背景颜色)。我正在执行的方式是正确的吗?或者我需要更改代码?请帮助我。

+0

我想你需要实现'AsyncTask.Status'来检查以前启动的任务是否完成。在启动新的.check之前检查前一个任务的状态。 –

回答

0

拉杰什,你的代码不能帮助我。

我的应用程序API级别11,所以我用

Task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR) 

帮我了,我的代码是工作的罚款。

2

你并不需要使用3角独立的AsyncTask秒。您可以使用单个AsyncTask如下:

private class TaskA extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void doInBackground(Void... params) { 
     ListA listA;//its an arraylist   

     listA = //calling my API 

     if(listA != null) { 
      //writing listA as serialized into sdcard. 
     } 

     for(ListAValues value : listA) { 
      ListB listB;//its an arraylist   

      listB = //calling my API 

      if(listB != null) { 
       //writing listB as serialized into sdcard. 
      } 
      ListC listC;//its an arraylist   

      listC = //calling my API 

      if(listC != null) { 
       //writing listC as serialized into sdcard. 
      } 


     } 
     return null; 
    } 

}