2015-11-11 3 views
0

Во время синхронизации я должен очистить онлайн-поток, а затем загрузить все данные по строкам с помощью HTTP-запросов. Один запрос на строку данных. Важно, чтобы HTTP-запросы выполнялись в последовательности, которую они создали.Mutliple http request android

Основной класс:

 //Sync cloud stream 
      HttpAsyncTask hats = new HttpAsyncTask(); 
      hats.execute(app.getProductCartStream().getClearUri()); 

      for(int i = 0 ; i<app.getProductCartData().size();i++){ 
       ArrayList<String> values = new ArrayList<String>(); 
       values.add(app.getProductCartData().get(i)); 
       String insertUri = app.getProductCartStream().getInsertUri(values); 
       HttpAsyncTask hat = new HttpAsyncTask(); 
       hat.execute(insertUri); 
      } 

Частный класс:

private class HttpAsyncTask extends AsyncTask<String, Void, String> { 
@Override 
protected String doInBackground(String... urls) { 
    try{ 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(urls[0]); 
     HttpResponse httpResponse = httpClient.execute(httpGet); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); 
     StringBuilder builder = new StringBuilder(); 
     for (String line = null; (line = reader.readLine()) != null;) { 
      builder.append(line).append("\n"); 
     } 
     return builder.toString(); 
    }catch (Exception e) { 
     Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();; 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    if(result!=null){ 
     Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show(); 
    } 
    else{ 
     Toast.makeText(getApplicationContext(), "Not able to save data", Toast.LENGTH_LONG).show(); 
    } 

} 

}

Вопрос 1: Будет ли запросы выполняться в порядке их создания? I. Очень важно, чтобы первый запрос HTTP очистил поток.

Вопрос 2: Все материалы HTTP, которые я устарел. Каков правильный способ сделать это сейчас?

Вопрос 3: Почему я не могу запустить синхронизированный код в application.onDestroy()?

ответ

1

Ans.1: - Да в новом AsyncTask(). Execute() все запросы обрабатываются последовательно. Для параллельного выполнения мы вызываем другой метод.

Ans.2: HTTP материал я осуждается, как DefaultHttpClient, даже в Android M их нет, следовательно, избегать их и использовать лучший способ, как:

HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 

... бла-бла-бла.

но лишение не означает, что ваш метод не будет работать.

Ans3: Я не могу ответить на ваш вопрос.

Thanks

+0

Очень хорошо, спасибо! :) Вопрос 3: запуск моего кода нажатием кнопки работает отлично. Но я попытался добавить код в обратный вызов onTerminate в моем файле приложения. \t @Override \t public void onTerminate() { – Snovva1

+0

Happy to help !!! – Androider