もうこれはテンプレ化しておきます。
Retrofit の話が中心となります。
Converter
JSON 形式のレスポンスをパースして変換するのは、Gson か Moshi が人気のように思います。
var retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
var retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com")
.addConverterFactory(MoshiConverterFactory.create())
.build()
👉 retrofit/retrofit-converters at master · square/retrofit
今回は、Kotlin Serialization を利用した「Kotlin Serialization Converter」を使います。
ExperimentalSerializationApi なのですがね。
val contentType = "application/json".toMediaType()
val retrofit = Retrofit.Builder()
.baseUrl("https://example.com/")
.addConverterFactory(Json.asConverterFactory(contentType))
.build()
Call Adapter
通信の非同期処理はどれに任せるか。
var retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build()
👉 retrofit/retrofit-adapters at master · square/retrofit
Coroutine を使った Jake製の「Kotlin Coroutine Adapter」は 今では DEPRECATED。
Retrofit は 2.6.0+ で、内部に suspend function をサポートしてるので、特に、.addCallAdapterFactory()
を使わなくてもよい。
@GET("users/{id}")
suspend fun user(@Path("id") id: Long): User
👉 retrofit/CHANGELOG.md at master · square/retrofit
HttpLoggingInterceptor
OkHttpClient に HTTP関連のログを吐かせます。
--> POST /greeting http/1.1
Host: example.com
Content-Type: plain/text
Content-Length: 3
Hi?
--> END POST
<-- 200 OK (22ms)
Content-Type: plain/text
Content-Length: 6
Hello!
<-- END HTTP
👉 HttpLoggingInterceptor.Level (OkHttp Logging Interceptor 3.14.0 API)
val logging = HttpLoggingInterceptor()
logging.setLevel(Level.BASIC)
val client = OkHttpClient.Builder()
.addInterceptor(logging)
.build()
👉 okhttp/okhttp-logging-interceptor at master · square/okhttp
まとめ
Dagger の Module にしておきます。
テンプレート化してください、と言わんばかりに
よく似たものをあちこちで見かけますよね。
見通しも良くなります。
コピペでどうぞ。
(おわり)
MVVM で Hilt のパターン化 💉 https://t.co/MbXMQijPzw #android #プログラミング初心者 #kotlin
— chanzmao (@maochanz) March 16, 2022