Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Square`s OkHttp. Download progress

Tags:

Is there any way to get downloading file progress when using square`s OkHttp?

I did not find any solution in Recipes.

They have class Call which can get content asynchronically, but there is no method to get current progress.

like image 545
Kalyaganov Alexey Avatar asked Sep 30 '14 06:09

Kalyaganov Alexey


2 Answers

Oops answer was obvious. Sorry for dumb question. Just need to read InputStream as usual.

private class AsyncDownloader extends AsyncTask<Void, Long, Boolean> {     private final String URL = "file_url";      @Override     protected Boolean doInBackground(Void... params) {         OkHttpClient httpClient = new OkHttpClient();         Call call = httpClient.newCall(new Request.Builder().url(URL).get().build());         try {             Response response = call.execute();             if (response.code() == 200) {                 InputStream inputStream = null;                 try {                     inputStream = response.body().byteStream();                     byte[] buff = new byte[1024 * 4];                     long downloaded = 0;                     long target = response.body().contentLength();                      publishProgress(0L, target);                     while (true) {                         int readed = inputStream.read(buff);                         if(readed == -1){                             break;                         }                         //write buff                         downloaded += readed;                         publishProgress(downloaded, target);                         if (isCancelled()) {                             return false;                         }                     }                     return downloaded == target;                 } catch (IOException ignore) {                     return false;                 } finally {                     if (inputStream != null) {                         inputStream.close();                     }                 }             } else {                 return false;             }         } catch (IOException e) {             e.printStackTrace();             return false;         }     }      @Override     protected void onProgressUpdate(Long... values) {         progressBar.setMax(values[1].intValue());         progressBar.setProgress(values[0].intValue());          textViewProgress.setText(String.format("%d / %d", values[0], values[1]));     }      @Override     protected void onPostExecute(Boolean result) {         textViewStatus.setText(result ? "Downloaded" : "Failed");     } } 
like image 167
Kalyaganov Alexey Avatar answered Sep 28 '22 18:09

Kalyaganov Alexey


You can use the okHttp receipe : Progress.java

like image 27
Christian Avatar answered Sep 28 '22 18:09

Christian