2019-03-15Retrofitを使った説明はたくさんあるが、デザインパターンを埋め込んで説明しているものが多く、肝心のRetrofitの役割がどこからどこまでなのかイメージし辛く分かりづらかった。そこで、MainActivity.ktファイルだけに必要なRetrofit関係のコードを書いていてみた。最小限のサンプルではあるが、動作を理解する上ではとてもわかりやすくなった。ここではRetrofitを使って、APIから拾ったデータを下の図のようにViewへ表示させるまでをやってみたいと思う。以外に短くて、拍子抜けしたかもしれない。本サンプルはGithubへあげておいた。記事ページ下のリンクを参照されたし。それでは手順を追って説明していく。APIの準備まず、自前のAPIを用意する。GithubやQiitaのような本格的なものではなく、もっとシンプルで単純なもののほうが理解を早めるからだ。それに、自分で作ったものなのでAPIの仕様を変更できるし興味もわく。いうことで、次のような内容のJSONファイルをサーバー上へ置いた。URLはこのようになっている。app)に次のように追加する。これは、retrofit2最新版と、GSON、そしてRetrofit用のGSONコンバーターを指定しているのだ。データクラスの作成JSONファイルの内容と合わせて、次のようなデータクラスを定義した。JSONのキーの名前とプロパティの名前は同じにすること。次にインタフェースを作成する。Call<JoJo>}ドメイン以下のパスをGETアノテーションの引数に渡す。この場合だと、ドメイン直下にファイルを置いたのでjojo.jsonを渡せば良い。fetchJoJoメソッドは、APIリクエストを行う。定義をするだけで、実装はやる必要はない。インポートしているものだ。一度どんなものか、仕様を見ておくと良いだろう。MainActivity最後にMainActivityクラスを見ていこう。ここでは、Retrofitオブジェクトを次のようにして生成する。今回GSONを使用するので、このファクトリメソッドを設定しないとJSONをオブジェクトに変換できない。以下のようなエラーが出たら、ここを疑ってほしい。JoJoService.fetchJoJoそれでは、先程のRetrofitオブジェクトを実際に使っていこう。メインスレッドでは実行できないので、thread内で実行していく。retrofit.create(JoJoService::class.java)では、先ほど作ったインタフェースのクラスオブジェクトを渡している。}}スレッド内から、UIを更新したい場合はこのように記述する。jojo.stand})以上でRetrofitを使ったサンプルコードの出来上がりだ。おっと、忘れていた!次の記述がマニフェストに無いと、インターネットアクセス出来ないのでご注意を。