Как скачать несколько файлов с OkHttp?
Мне нужно скачать несколько файлов с помощью библиотеки 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
}
}
});
Как я могу загрузить все файлы, а не только один?
2 ответа
Я просто приведу пример RxJava / Kotlin здесь...
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
}
Это не только лаконично, но и обрабатывает ошибки и синхронизацию потоков
Я предполагаю, что у вас есть список с 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
}