2017-08-10 9 views
0

OkHttpを使用する場合、ネットワーク要求は、次のコードで1又は2に実行されます。okhttp - 実行()体対()バイトストリーム

  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

それぞれに4つのステップがありますが呼び出しOkHttp:それはレスポンスヘッダ

  • ストリームレスポンスボディ
  • を読む
  • が存在する場合

    1. は、ストリームに
    2. リクエストボディをリクエストヘッダを書きます

      ​​を呼び出すと、OkHttpはステップ1〜3を実行します。卵レスポンスボディが大きい場合は、レスポンスのデコードを開始することができます。

  • +0

    ありがとう@Jesse!それは多くの意味があります。 2つのフォローアップの質問、私はストリームを閉じるか、okhttpは私のためにそれをする必要がありますか?そして、この主題についてもっと知るためには、どのようなリソースをお勧めしますか?もう一度ありがとう – feresr

    +1

    はい、常に応答の本文を閉じます。最適なリソースは、OkHttp wikiとHTTP仕様です。 –

    関連する問題