2017-08-10 101 views
0

,網絡請求在12在下面的代碼執行:okhttp - 當使用<code>OkHttp</code>執行()與主體()的字節流

  val response = client.newCall(request).execute() // (1) 
      if (response.isSuccessful) { 
       val bs = response.body().byteStream() // (2) 
       val bitmap = BitmapFactory.decodeStream(bs) 
      } else { ... } 

我一直認爲我在(1)執行,其中有必要問一下答案是否成功。但是,今天我決定實現this official recipe跟蹤要下載的文件的進度。

然後我意識到,如果我刪除線(response.body().byteStream()),進度計數器不動彈。從理論上講,我們不下載任何東西,除了我們要不什麼success意味着在這種情況下。

對不起,如果這是一個虛擬的問題,我相信這裏有一些非常重要的關於我在這裏失蹤的網絡,我想了解更多。 我試圖理解爲Okio庫的源代碼,但它是一個有點複雜對我來說,我需要一些參考和指導。

回答

1

有四個步驟,每個OkHttp電話:

  1. 寫請求頭
  2. 流請求體,如果它存在
  3. 閱讀響應頭
  4. 流響應主體

當你調用​​OkHttp做步驟1 - 3還呼籲流響應b ODY。如果您的響應主體很大,這可以讓您在響應正在下載時開始解碼響應。

+0

感謝@Jesse!這很有道理。兩個後續問題,我必須關閉流或okhttp爲我做?你推薦哪些資源來更多地瞭解這個主題。再次感謝 – feresr

+1

是的,總是關閉響應主體。 OkHttp wiki和HTTP規範就是最好的資源。 –