Kotlinでは通信後のGsonの入れ物をどうすればいいのかと思ったので書きます。
Kotlinには、dataclassというその名の通りデータを入れ込むためのclassがあるので、
通信後にデータを受け取る場合には、このクラスを使用します。
1 2 3 4 |
data class PlayList( var title: String, var thumbnail_url: String ) |
Gsonでパースするので、命名はjsonファイルの命名同じにします。
または、@Serializeを使います。
gradleファイル
1 2 3 |
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' |
rxjavaも一緒に追加しました。
retrofix用interfaceを定義
1 2 3 4 |
interface getPlayList { @GET("get.php") fun getPlayList(): Observable<List<PlayList>> } |
jsonファイルには、object array型で返却されるので、List型を渡します。
続いてリクエスト部分です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
val gson = GsonBuilder().create() val retrofit = Retrofit.Builder().baseUrl("https://baseurl/").addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build() // クラスの指定方法 var endPoint = retrofit.create(getPlayList::class.java) endPoint.getPlayList().subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) // 通信終了処理 .doAfterTerminate { } .subscribe({ // data class PlayListのListが帰る myPlayList = it }, { // エラー }) |
クラスを指定するには、
クラス名::class.java
と書きます。
kotlinでは、 data classを使いましょう