テック開発者ブログテコテック開発者ブログ読者になるテコテック開発者ブログ2020-01-09【Android】Retrofit2を使ったAPI通信についてAndroidエンジニアをやっている佐野と申します、ちなみに柴犬が好きです。持ち前の強運により、あみだくじで見事に当たり(?)を引き当ててしまったため、今回記事を書かせていただくこととなりました。何について書こうか迷いましたが、今回はRetrofit2を使ったAPI通信の方法について書かせていただきたいと思います。■Retrofit2とは?OkHttp3の開発元が作成した、API通信を簡単に行なうことに特化したライブラリ。Volleyなどがありますが最近はRetrofit2が使われることが多いみたいです。それぞれ良さはあるので用途によって実装方法を検討するほうがいいと思います。■導入まずはAndroidManifest.xmlに、ネット接続のためのパーミッション設定を追加します。android:name="android.permission.INTERNET"/></manifest>次にRetrofit2を使うために、/app/build.gradleに以下を追記します。"com.squareup.retrofit2:converter-gson:$retrofit_version"}これで前準備は完了です。■実装まず、APIを定義するためのinterfaceを作成します。今回はサンプルとして、livedoorで配信されている天気取得用のフリーAPIを使っていきます。公式サイト:http://weather.livedoor.com/forecast/webservice/json/v1interface側で設定する部分は"v1"部分とクエリパラメータ部分です。Call<WeatherData>}@GETはもちろん、@POSTや@PUTなども用意されているので簡単に定義することが出来ます。このフリーAPIでは「city(定めされた都市コード)」のリクエストパラメータが必要になります。型]とすることで、URLの最後に付与される?以降の要素をセットすることが出来ます。引数としておくことで、getWeatherを外から呼び出すときに「city」を動的に指定することができるようになります。getWeatherの戻り値に指定されているCallはRetrofit2で用意されているレシーバークラスです。<>に、自身で作成したEntityデータクラスをセットする必要があります。雑に今回のAPIのデータクラスを定義するとこんな感じです。Serializableここで定義した変数名とjsonの項目がキーとなっており、後述するGsonでのパースの際に一致している必要があります。変数名とjsonの項目名を別にしたい場合はこのようにします。次はRetrofitクライアントの実装を行います。「.addConverterFactory」ではJsonをパースするためのコンバータの指定をしています。ご自身が慣れている使いやすいものを使用してください。※個人的にはGson推し尚、serializeNulls()とすることで、対象がnullのフィールドもシリアライズするようにしています。デフォルトではシリアライズされませんのでご注意ください。それではクライアントの実装が完了したので、これを使っていきましょう。}}requestWeatherData()をボタンクリックなどから呼び出して使います。この使い方は本当に基礎的なものなので、本来はViewModel+Repositoryを通してMVVMやMVC形式で使うことが望ましいです。その辺りの説明はかなり長くなるので、割愛します。APIの実行にはcityIdが必要です。実行する場合は固定でidをセットするか、EditTextなどで入力してください。cityIdとして使えるidは以下で確認出来ます。URL:http://weather.livedoor.com/forecast/rss/primary_area.xml■おわりざっくりでしたがいかがでしたでしょうか?AndroidでAPI通信する際はぜひRetrofit2を使ってみてください!最後におすすめの柴犬Youtubeチャンネルを貼っておきます!毎日更新されているのでぜひみてください!【よりめのはちくん。〜暗黙的インターフェースから理解するクラス修飾子編〜こんにちは!決済認証システム開発事業部の冨永です。普段はiO...2023-03-15Next.jsとSequelizeを使ったアプリ開発に取り組んでみたこんにちは、次世代デジタル基盤開発事業部の渡邊です。今回は...2022-07-08NestJSでAPI開発を行うこんにちは、次世代デジタル基盤開発事業部の野口です。