Androidで通信を行うときの悩み…
- やたらと長いコードが必要になる
- UIスレッドをブロックするの禁止
- 非同期処理がどうたらこうたら
だからライブラリを使うわけですが、
やっぱりコードが冗長になるのが嫌でした
そんな時ぴったりのライブラリを見つけました
その名も Fuel というライブラリ
数行でRestAPIも呼び出せて便利です。
このFuelの導入・使い方をまとめてみました。
このページの目次
まずAndroidManifestでネット通信を許可する
説明するまでもないですが必須です
▼ AndroidManifest.xmlに追加
1 2 |
<!-- このパーミッションが必須 --> <uses-permission android:name="android.permission.INTERNET" /> |
追加場所はapplicationタグの前が良いと思います。
パーミッションはこれ以上説明することなし
Fuelライブラリをbuild.gradleに追加
お次にbuild.gradleからFuel追加します。
アプリレベルのbuild.gradleを開いてください
▼ こういう内容を追加すればOK
1 2 3 4 5 |
/// Fuel library def fuel_version = "2.3.1" implementation "com.github.kittinunf.fuel:fuel:$fuel_version" implementation "com.github.kittinunf.fuel:fuel-android:$fuel_version" implementation "com.github.kittinunf.fuel:fuel-json:$fuel_version" |
現在最新バージョンは2.3.1
コア機能を使うだけなら fuel と fuel-android だけ入れれば十分です。ここではRestAPIからJSONを受け取るので fuel-json も追加しました。
適当なRestAPIに対してGETリクエストを送ってみる
まずはGETリクエストから試してみました。
サンプルAPI : https://api.blockchain.info
ビットコインの公開APIにリクエストしてみます。
▼ こういったコードでGETリクエスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/// リクエストURL val url = "https://api.blockchain.info/stats" /// ヘッダー(キー・値のHashMap) val headers = hashMapOf( "xxx" to "123" ) /// GETリクエスト送信! Fuel.get(url).header(headers).responseJson { request, response, result -> when (result) { is Result.Failure -> { /// リクエスト失敗・エラー val ex = result.getException() //Log.d(TAG, "Failure : "+ex.toString()) } is Result.Success -> { /// レスポンス正常取得 /// JSONObjectに変換 val data = result.get().obj() Log.d(TAG, "Responsed JSON : " +data.toString()) } } } |
▼ ログ出力されたJSONレスポンス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Responsed JSON : {"timestamp":1646705082000, "market_price_usd":38203.8, "hash_rate":2.0269109657218195E11, "total_fees_btc":-92500000000, "n_btc_mined":92500000000, "n_tx":256371, "n_blocks_mined":148, "minutes_between_blocks":9.1293, "totalbc":1897720625000000, "n_blocks_total":726353, "estimated_transaction_volume_usd":4.600577116678917E9, "blocks_size":179090912, "miners_revenue_usd":0, "nextretarget":727775, "difficulty":27550332084343, "estimated_btc_sent":12042197678448, "miners_revenue_btc":0, "total_btc_sent":354300856931660, "trade_volume_btc":7583.77, "trade_volume_usd":2.8972883232600003E8} |
jQueryのAjax並みのシンプルさです
何をしているかが直感的に分かりやすいし、Ajaxになじみがある人にも使いやすいかも。
あとここでは responseJSON{...} を使ってJSONとしてレスポンス取得してます。だから result.get().obj() と変換すればJSONObjectとしてレスポンスを扱えます
お次にPOSTリクエストを送信してみる
次はGETと同じくPOSTリクエストしてみます。
▼ 次のようなコードを書いてみた
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/// リクエストURL val url = "https://hoge.com/api" /// POSTデータ val bodyJson = = JSONObject(""" { "user_name": "xxx", "password": "1234" } """.trimIndent()).toString() /// ヘッダー(キー・値のHashMap) val headers = hashMapOf( "xxx" to "123" ) /// GETリクエスト送信! Fuel.post(url) .body(bodyJson) .header(headers) .responseJson { request, response, result -> when (result) { is Result.Failure -> { val ex = result.getException() Log.d(TAG, "Fuel Result failure : "+ex.toString()) } is Result.Success -> { val data = result.get().obj() Log.d(TAG, "Fuel twitter guest token : " +data.optString("guest_token", "None")) } } } |
ほとんどGETリクエストの時と同じ
他にもFuelにはダウンロード機能などもある
他にもFuelには色々な機能が含まれてます。
- PUT / DELETE / HEADのリクエスト
- ファイルとして直ダウンロード
- ファイルのアップロード
- コルーチンによるリクエスト通信
紹介しきれないほど多機能で便利です。
以上、AndroidでのFuelの使い方でした。ではまた