2014-09-30 67 views

回答

22

哎呀答案很明顯。對不起愚蠢的問題。只需要像往常一樣閱讀InputStream。在while循環每次

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"); 
    } 
} 
+3

是不是有一個更優雅的方式來做到這一點?像okHttpClient.newCall(請求).notifyProgress(回調)...或類似的東西... – josketres 2015-01-08 16:26:47

+0

很好的答案,但還有一個問題...我看到我們有一個輸入流...要將它傳遞給一個文件,我們必須再次遍歷整個流並將其轉換爲文件?你能否展示如何獲得已下載的File對象? – 2015-04-01 18:48:23

+0

@MarcusGabilheri你在說這個嗎? http://stackoverflow.com/a/10857407/1979290 – 2015-04-02 11:01:07

0

,你發佈的progress.So它就像被封鎖