2015-12-04 5 views
0

На самом деле, что я хочу сделать, это запустить асинтезу внутри цикла с разными значениями. Итак, как только закончившаяся асинхронная работа заканчивается, она снова запустит асинтекс с другим значением и продолжит работу до тех пор, пока цикл не закончится.Как разместить асинхронную внутреннюю петлю

Здесь первая асинтеза должна запускаться, как только ее вызываемые и следующие будут запущены до того, как закончится предыдущая асинхронизация.

Код будет что-то вроде:

Myasync mAsync = new Myasync(); 

for(int i=0; i<5 ; i++) 
{ 
    mAsync.execute(i); 
} 

Как это сделать? :-)

+0

Вы хотите, чтобы сделать некоторые вещи на 'UI thread' когда каждый' AsyncTask' завершена? –

+0

@Yuriy Kolbasinskiy: нет, мне не нужно ничего делать в потоке пользовательского интерфейса после каждого завершения асинхронности. –

ответ

2

я предлагаю что-то вроде этого в вашем doInBackgroundMethod:

protected ArrayList<String> doInBackground(String... urls) { 
    ArrayList<String> result = new ArrayList<>(); 
    for(int i = 0; i< urls.length; i++){ 
     try { 
      URL url = new URL(urls[i]); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      try { 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
       StringBuilder stringBuilder = new StringBuilder(); 
       String line; 
       while ((line = bufferedReader.readLine()) != null) { 
        stringBuilder.append(line).append("\n"); 
       } 
       bufferedReader.close(); 
       result.add(stringBuilder.toString()); 
      } finally { 
       urlConnection.disconnect(); 
      } 

     } catch (Exception e) { 
      Log.e("ERROR", e.getMessage(), e); 
      result.add(null); 
     } 
    } 
    return result; 
} 

Уведомление параметр String... urls

+1

Это сработало отлично для меня. Шаон Хасан: Если бы это сработало для вас, можете ли вы отметить это как принятый ответ? – Sparky1