2016-02-29 3 views
1

Мне нужно загрузить несколько файлов с помощью OkHttp libarary. И после того, как все загрузки закончены, мне нужно сообщить пользователю.Как загрузить несколько файлов с помощью OkHttp?

Я знаю, как загрузить один файл с помощью OkHttp. Вот код:

OkHttpClient okHttpClient = new OkHttpClient(); 
Request request = new Request.Builder() 
       .url(url) 
       .build(); 
okHttpClient.newCall(request).enqueue(new okhttp3.Callback() { 
      @Override 
      public void onFailure(okhttp3.Call call, IOException e) { 
       Log.d("TAG", "download file fail: " + e.getLocalizedMessage()); 
      } 

      @Override 
      public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { 
       if (response.isSuccessful()) { 
       //I have response data of downloaded file 
      } 
      } 
     }); 

Как я могу загрузить все файлы, а не только один?

+0

, что о том, мультипликатор Запросы? – giannisf

ответ

0

Я предполагаю, что у вас есть список с URL-адресами для загрузки файлов.

String[] urls = //; 

для каждого URL-адреса сделать запрос.

for (String url : urls) { 
    Request request = new Request.Builder() 
       .url(url) 
       .build(); 
Response response = okHttpClient.newCall(request); 
// do something with the response 

} 
+0

Okey, я должен упомянуть, что я пробовал цикл, но он не работает. – Zookey

+0

@ Zookey Я изменил свой ответ – giannisf

+0

В чем разница между старым ответом и этим обновленным? Я думаю, что для цикла не работает, потому что все происходит в фоновом режиме, и вы теряете контроль над тем, какой файл загружен. – Zookey

2

Я просто бросить пример RxJava/Котлин в здесь ...

Observable.from(urls) 
    .subscribeOn(Schedulers.io()) 
    .map { url -> 
     val request = Request.Builder().url(url).build() 
     okHttpClient.newCall(request).execute() 
    } 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe { responses -> 
     // responses: List<Response> - do something with it 
     // nothify User (we're on the UI thread here) 
    }, { error -> 
     // handle the error 
    } 

Это не только кратким, но и делает его обрабатывать ошибки синхронизации в & резьба

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