2012-06-20 4 views
0

내 응용 프로그램에서 로그인 페이지에서 로그인을 클릭하면 3 API를 호출해야합니다. 이 요구 사항을 수행하려면 3 개의 AsyncTask가 있어야합니다. 내가하고있는 일은 onPostExcecute()의 첫 번째 작업에서 두 ​​번째 작업을 호출하고 세 번째 작업은 두 번째 작업의 onPostExecute()에서 호출합니다.호출 Asynctask 지연 생성

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

, 화면이 흑백 색으로 깜박

TaskA는 것 같습니다. (흰색은 내 방문 페이지 활동의 배경색입니다.) 내가 구현하는 방식이 옳은가요? 또는 코드를 변경해야합니까? 제발 도와주세요.

+0

나는 이전에 시작한 작업을 검사하기 위해'AsyncTask.Status'를 구현해야한다고 생각합니다. 새 작업을 시작하기 전에 이전 작업의 상태를 확인하십시오. 아마도 도움이 될 것입니다. –

답변

0

인 Rajesh, 코드가 나를 도울 수 없습니다 다음과 같이 단일 AsyncTask를 사용할 수 있습니다.

내 애플 그래서이 나를 도와 내 코드는 잘 작동됩니다

Task.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR) 

을 사용 API 레벨 11입니다.

2

3 개의 별도 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; 
    } 

}