【Android】 HttpUrlConnectionを使ってみる
概要
Androidで通信を行う際は、Retrofitがデファクトかなと思いますが、
HttpUrlConnectionを試しに触ってみたものの記録です。
とりあえず公式を読もう
まずは公式ドキュメントを読みました。
ドキュメントを読んで分かったこと
以下は、公式の最初に出てくるサンプルコードです。
やっていることは、URLに対してGETリクエスト実行して、レスポンスを受けとるという処理です。
val url = URL("http://www.android.com/")
val urlConnection : HttpUrlConnection = url.openConnection() as HttpUrlConnection
try {
val inputStream = BufferedInputStream(urlConnection.getInputStream())
readStream(inputStream) // ※この部分を、コピペしても動かない
} finally {
urlConnection.disconnect()
}
まず以下で、URLからURLクラスのオブジェクトを作成して、
作成したURLオブジェクトで、openConnection()
を実行します。
openConnection()について
openConnection()によって、リクエスト先とのコネクションを確立します。
val url = URL("http://www.android.com/")
val urlConnection : HttpUrlConnection = url.openConnection() as HttpUrlConnection
次に、レスポンスの処理方法について
まずurlConnection.getInputStreamで、レスポンスのボディを受け取ります。
そして、readStream
は、おそらく自分で定義するメソッド?
なので、そのままコピペしても動かないです。
受け取ったInputStreamをStringなどに変換する処理を実行するものと思われます。
そして、finallyで、urlConnection.disconnect()
でリークしないように、コネクションを切断します。
try {
val inputStream = BufferedInputStream(urlConnection.getInputStream())
readStream(inputStream)
} finally {
urlConnection.disconnect()
}
追加で分かったこと
val url = URL("http://www.android.com/")
val urlConnection : HttpUrlConnection = url.openConnection() as HttpUrlConnection
urlConnection.setRequestMethod("GET") // "POST"などにすることで、HTTPメソッドを変更できる。デフォルトはGET
urlConnection.connectTimeout(6000) // msで接続のタイムアウトを設定可能
urlConnection.readTimeout(6000) // レスポンスの読み取りタイムアウトを設定
urlConnection.setRequestProperty("Key", "value") // リクエスト ヘッダーにContent-Typeを設定。
// 例: setRequestProperty("Content-Type", "application/json; charset=utf-8")
感想
公式でもRetrofitが推されているように、HttpUrlConnectionでやる必要はないかなと思いました。