1

OkHttp ライブラリを使用して複数のファイルをダウンロードする必要があります。すべてのダウンロードが完了したら、ユーザーに通知する必要があります。

OkHttp を使用して 1 つのファイルをダウンロードする方法を知っています。コードは次のとおりです。

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
            }
          }
        });

1 つのファイルだけでなく、すべてのファイルをダウンロードするにはどうすればよいですか?

4

2 に答える 2

4

ここに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
   }

これは簡潔であるだけでなく、エラーとスレッドの同期も処理します

于 2016-03-01T10:19:19.837 に答える
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

}
于 2016-02-29T18:20:17.257 に答える