如何用OkHttp下载多个文件?
我需要使用OkHttp libarary下载多个文件。 所有下载完成后,我需要通知用户。
我知道如何用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 } } });
我怎样才能下载所有的文件,而不只是一个?
我将在这里举一个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 = //;
为每个网址发出请求。
for (String url : urls) { Request request = new Request.Builder() .url(url) .build(); Response response = okHttpClient.newCall(request); // do something with the response }
- 'com.android.tools.build:gradle:3.0.0-alpha3'和'com.android.tools.build:gradle:3.0.0-alpha1'有什么区别?
- Kotlin崩溃无法将提供的符号转换为Dependency类型的对象:org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension_Decorated
- 如何处理Android的改造反应Kotlin?
- TestScheduler不起作用(Kotlin + RxJava2 + mockito)
- 如何通过setOnEditorActionListener关闭android alert对话框本身?
- 以编程方式获取Android中的“屏幕锁定”设置
- 缩小子视图的高度相同
- 服务不写入SharedPreferences
- 使用改造方法更具表现力的方式