Studio:FlamingoKotlin:1.8.20Retrofitとは?RetrofitはAndroidアプリ開発で簡単にHTTP通信を実装できるライブラリです。開発したのはSquare社という会社でオープンソースのライブラリになっています。API)を利用するためにはRetrofitは欠かせない存在です。HTTP通信を実装するにはややこしいAPIのエンドポイントを把握したり、サーバーのエラー処理、レスポンスで受け取ったJSONのマッピングなど複雑でめんどくさい作業が多いです。それをRetrofitを使うことで簡単に実装できるようになっているので使い方を見ていきます。HTTP通信部分の内部的な実装は同じSquare社が開発しているOkHttpが使われています。実際に実装するために今回はQiitaの記事情報を取得できるAPIを使用していきます。APIのエンドポイントは以下のURLでここから記事情報が以下のJSON形式で返ってきます。.....他にもさまざまな情報}]ちなみにSwiftで実装した記事は↓こちらです。実装の流れ最初に実装の流れを確認しておきます。今回のプロジェクトの全体はGitHubに上げていますので参考にしてください。必要になるクラスなどRetrofitでAPI取得アプリを実装するにあたって必要となるクラスなどをまとめておきます。Studio内で使用できるようにするには依存関係を追加する必要があります。一緒にRetrofitが公式サポートしているGSON(JSONをマッピングするライブラリ)も導入しておきます。'com.google.code.gson:gson:2.8.5'}インターネットの利用を可能にするAndroidアプリからWeb通信をさせるためにはまず設定を変更する必要があります。/>を追加しておきます。続いてJSONで返ってくるデータをKotlinで扱えるようにデータクラスを定義しておきます。ここのプロパティ名はJSONのキー値と同じにしておきます。JSONの構造にあったようなクラス関係に定義する必要があります。続いてインターフェースを定義します。XxxxxServiceという名前にしていることが多いのでQiitaServiceとしておきました。ここでは実際にリクエストを送るメソッドを定義していきます。GETメソッドを定義したい場合は以下のようになります。驚くほど簡素な定義ですがあとはRetrofitが上手いことやってくれるようです。Call<List<Article>>}ここでポイントとなるのが@GETアノテーションとCallクラスです。GETメソッドを定義する際は@GETアノテーションをPOSTメソッドを定義する際は@POSTアノテーションという具合に付与することであとはRetrofitに任せておけます。今回定義したfetchDataメソッドには具体的な実装は何もありませんが、これだけでHTTP通信を実装する処理は完了です。@GETアノテーションの引数に渡しているのはAPIパスの続きです。今回ではhttps://qiita.com/api/v2/がベースとなり、itemsが変化させる可能性のあるパス部分になります。今回はパスのみでしたがクエリパラメータなども指定可能です。ベースURLの定義ではベースとなるURLも定義しておきましょう。「MainActivity.kt」に移ってプロパティにRetrofitインスタンスを生成しておきます。Retrofit.Builderメソッドからインスタンスを生成でき、addConverterFactoryメソッドで変換してくれるConverterFactoryを指定します。今回はGSONなのでGsonConverterFactory.create()でOKです。あとはAPIのベースURLを私、buildを実行します。最後にMainActivity内からHTTP通信を実行します。今回は取得したJSONをTextViewに格納するようにしておきました。先にコードを見てみます。}}まず最初にQiitaServiceクラスをクラスリテラル(::class.java)を使用して取得します。retrofit.create(QiitaService::class.java)次に実行したいHTTP通信を定義したメソッドを呼び、Callインスタンスを取得します。CoroutinesでDispatchers.IOを指定しexecuteメソッドで実際に実行しています。通信処理の実行はexecuteメソッドを使用すると同期的にenqueueメソッドを使用すると非同期的にHTTPリクエストが実行されます。}}executeメソッドの結果からbodyメソッドでJSONデータを参照できるので値がnullであれば例外をスローし、nullでなければメインスレッドに切り替えてUIの更新をしています。toStringメソッドを使用して無理やりテキストとして表示しましたが実際にはArticleクラスのList形式に変換されているのでそのままリサイクルビューなどに渡すだけで簡単に表示することが可能です。返り値を必要としないPOSTメソッドを実装する返り値を必要としないPOST送信を実装する場合も見てみます。POSTの場合は何かしらURLにデータを含ませることが多いと思いますが、パスに含めたい場合は@POST("{token}/{title}/{msg}")でURL部分を構築し、@Pathを使用して引数とパスを繋ぎます。Response<Unit>}呼び出す際は以下のようにすっきり記述することができます。詳細な使い方などは公式サイトを参考にしてください。私がRetrofitを使用する際に発生したエラーを紹介しておきます。Call以下のエラーはインターフェース定義時にCallのimport文が間違っていることで発生したエラーです。android.telecom.Callが入ってしまうようです。⚪︎これはimport文を書き換えることで解決しました。QiitaService.fetchData以下のエラーはコンバーターが正常に指定されていない場合に発生するエラーのようです。私は最初GSONではなくScalarsConverterFactoryを使用しておりましたがこちらではなぜか以下のエラーが発生しうまくいきませんでした。Studio】Moshiの使い方!JSONをパースする方法まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。友達や家族の誕生日を登録しておくと当日に通知が届きお知らせしてくれるiOSアプリです。貸し借り管理アプリお金の貸し借りを管理するためのアプリです。貸借の色が分かれているので識別しやすく、使いやすさを求めてできるだけシンプルなUIにしています。カシホン人に貸すことが多く、誰に貸したか忘れがちな本の貸し借りを記録できるアプリです。