Как узнать, что AsyncTasc во внешнем классе закончен? - PullRequest
0 голосов
/ 24 мая 2011

Я создал класс DataAdapter, который запускает потоки для получения данных с веб-сервисов. Когда вызывается в упражнении, используя

DataAdapter.InitData();

как я могу узнать, когда оба потока закончены?

Спасибо Июль

public class DataAdapter {

    private final static String URL = "http://www.mywebservice.com";
    private final static String URL_AD = "http://www.mywebservice2.com";

    public void InitData(){

       new GetInitData().execute(URL);
       new GetAd().execute(URL_AD);

    }

    private static class GetInitData extends AsyncTask<String, Integer, JSONObject> {
        protected JSONObject doInBackground(String... urls) {  

            JSONObject json = RestJsonClient.getJSONObject(urls[0]);
            return json;
        }

        protected void onProgressUpdate(Integer... progress) {                
        }

        protected void onPostExecute(JSONObject json) {          

           //process data
        }
    }

    private static class GetAd extends AsyncTask<String, Integer, JSONObject> {
        protected JSONObject doInBackground(String... urls) {  

            JSONObject json = RestJsonClient.getJSONObject(urls[0]);
            return json;
        }

        protected void onProgressUpdate(Integer... progress) {                
        }

        protected void onPostExecute(JSONObject json) {          

           //process data
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Добавьте синхронизированный метод к вашему классу DataAdapter, который каждый из AsyncTask вызывает в своем onPostExecute ().В этом методе вы устанавливаете логическую переменную, указывающую, что первое задание завершено, когда второй AsyncTask вызывает метод, он проверяет, завершился ли первый поток.Если оба закончили, вы можете перейти с вашим собственным кодом.

0 голосов
/ 24 мая 2011

Используйте это:

public class DataAdapter {

private final String URL = "http://www.mywebservice.com";
private final String URL_AD = "http://www.mywebservice2.com";
private boolean finished = false;

public void InitData(){

   new GetInitData(this).execute(URL);
   new GetAd(this).execute(URL_AD);

}

public void finished(){  
  if(!finished){
   finished = true;
  }else{
   Log.d("TAG","Both have finished"):
  }


private class GetInitData extends AsyncTask<String, Integer, JSONObject> {
    Activity ac = null;
    public GetInitData(Activity ac){
      this.ac=ac;
    }

    protected JSONObject doInBackground(String... urls) { 

        JSONObject json = RestJsonClient.getJSONObject(urls[0]);
        return json;
    }

    protected void onProgressUpdate(Integer... progress) {                
    }

    protected void onPostExecute(JSONObject json) {          

       //process data
       ac.finished();
    }
}

private class GetAd extends AsyncTask<String, Integer, JSONObject> {
   Activity ac = null;
    public GetInitData(Activity ac){
      this.ac=ac;
    }

    protected JSONObject doInBackground(String... urls) {  

        JSONObject json = RestJsonClient.getJSONObject(urls[0]);
        return json;
    }

    protected void onProgressUpdate(Integer... progress) {                
    }

    protected void onPostExecute(JSONObject json) {          

       //process data
       ac.finished();
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...