2013-09-13 8 views
0

В моем приложении я получаю информацию о погоде из Интернета в asynctask, но иногда сервер немного отстает, и я хочу сделать до 10 запросов (если предыдущий был неуспешен) с 10 секундами ожидания между запросами. Но когда я заставляю свою асинтаску ждать 10 секунд (моделирование не отвечает на сервер), основной поток (пользовательский интерфейс) зависает до тех пор, пока asynctask не закончит работу (сделайте 10 раундов запросов).asynctask останавливает основную нить

вот код, где я сделать и выполнить AsyncTask

WeatherGetter wg = new WeatherGetter(); 
    wg.execute(url); 
    try { 
     weather = wg.get(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

и это, где я сделать его ждать

if (cod != 200) { 
      synchronized (WeatherGetter.this) { 
       try { 
        WeatherGetter.this.wait(10000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
+0

Вы получаете блокировку на WeatherGetter перед ожиданием в течение 10 секунд? Вы должны уведомлять свою деятельность о том, что у вас есть данные в onPostExecute. – JustinDanielson

+0

Не могли бы вы разместить весь код? Эта единственная часть не помогает нам – StErMi

+0

В погоне за геттером вы делаете http-запрос? –

ответ

2

Попробуйте этот путь

не ждать нить

вызов такой же функции рекурсивно, если код! = 200, как этот

private void loadWhetherData(final int count) { 

     new AsyncTask<Void, Void, Void>() { 

      @Override 
      protected Void doInBackground(Void... params) { 
       WeatherGetter wg = new WeatherGetter(); 
       wg.execute(url); 
       try { 
        weather = wg.get(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       } 
       if (cod != 200 && count<10) { 
        loadWhetherData(++count); 
       } 
       return null; 
      } 
     }.execute(); 

    } 

Вызов

Этот метод вызовы 10 раз, пока не suceess

loadWhetherData(1); 
+0

Вы забыли добавить .execute()? – JustinDanielson

+0

ohh sorry man Я просто обновляю –

+0

Так что я должен сделать еще один асинхронный процесс в моем асинхронном режиме? – user2582081

Смежные вопросы