OkHttpでHTTP通信 (Android Kotlin)



今回は、OkHttpを使ってHTTPリクエストの動作確認を行ってみた。また既存のHttpURLConnectionバージョンとも比較してみた。



やること


OkHttpと、Java / Kotlin標準のHttpURLConnectionを使って、GET、POSTリクエストの動作確認を行った。


完成イメージ(MainActivityからの呼び出し)




MainActivityからの事項例はこの様になる。


各メソッドでやっていることは単純だ。

1. HTTPクライアント作成
2. バックグラウンドタスクへ委譲
3. コールバックを受け取り、値をViewへ反映

サーバーにはGETとPOSTで出力メッセージを切り替えるだけの、簡単なプログラムを置いた。




HTTPクライアントのインタフェースを作る


HTTPクライアントをバックグラウンドタスクへ委譲するため、このようなインタフェースを作ることにした。

interface HTTPClient {
    val url:String
    val body:String?
    fun request(): String?
}



このインタフェースを実装して、OkHttpClientおよびVerboseHttpClientを作ることにする。






OkHttpClientでPOSTのBodyを用意する


OkHttpではPOSTのパラメータを渡すときに、次のようにビルダーで生成しなければならない。

fun buildMultipartBody(body:String):MultipartBody {
    val builder = MultipartBody.Builder().setType(MultipartBody.FORM)

    for ((k, v) in body.toParams()) {
        builder.addFormDataPart(k, v)
    }
    return builder.build()
}


key1=value1&key2=value2 のような形式の文字列は、そのまま渡せないのでパースする。

Stringクラスを拡張してパースしてみた。

fun String.toParams():List<List<String>> = this
	.split(Regex("&"))
	.map { it.split(Regex("=")) }




AsyncTaskを継承したHTTPTask


HTTPTask`は次の様になっている。



コンストラクトに渡されるジェネリック型Tのactivityは、where以降で制約している通り、AppCompatActivityとHTTPTask.Listenerを実装している必要がある。

循環参照対策として、渡されたActivityはWeakReferenceに指定している。

こちらの記事を大いに参考させてもらった。

AsyncTaskに安全にcallbackを持たせたい




関連記事


非同期 & ネットワーク処理
はじめてRetrofitを使ってみる (Android Kotlin)
非同期処理でCoroutine(コルーチン)を使ってみる (Android Kotlin)
OkHttpでHTTP通信 (Android Kotlin)
スレッド処理 (Android Kotlin)

View & レイアウト
リサイクラービューを使ってリスト表示 (Android Kotlin)
角丸表現 (Android Kotlin)
onSaveInstanceStateで画面回転時の状態の保存と復元 (Android Kotlin)
ListViewを簡単なモデルで理解しよう (Android Kotlin)
バネアニメーション (Android Kotlin)
startActivityForResultを使ってみる (Android Kotlin)
ActivityとFragmentの連携を理解する (Android Kotlin)
DataBinding機能を使ってみる (Android Kotlin)
タッチイベントのフック (Android Kotlin)
DialogFragmentを使ったダイアログの表示 (Android Kotlin)

サウンド
これってSoundPoolのバグ?(Android Kotlin)
SoundPoolを使ってゲームの効果音を再生する (Android Kotlin)

データ & オブジェクト
Kotlinでオブジェクト(object)の動作確認
データクラスとタプル (Android Kotlin)
Null安全、ぬるぽバイバイ (Android Kotlin)




あなたにおすすめ