【发布时间】:2021-02-26 20:40:57
【问题描述】:
我正在尝试找出处理改造响应的最佳做法。
我提供这样的改造单例:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(AuthInterceptor())
.addInterceptor(httpLoggingInterceptor)
.build()
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(CoroutinesResponseCallAdapterFactory())
.build()
val service = retrofit.create(ShowsService::class.java)
服务接口是这样的:
interface ShowsService {
@GET("popular")
suspend fun fetchPopularShows(): Response<PopularShows>
}
我从 API 获取节目列表并在存储库中解析它,如下所示:
override suspend fun getShows(): Result<List<Show>?> {
val shows = service.fetchPopularShows()
val body = shows.body()
val errorBody = shows.errorBody()
return when {
body != null -> {
Result.Success(body.shows)
}
errorBody != null -> {
Result.Error(Exception(errorBody.string()))
}
else -> {
Result.Error(Exception("Unknown error: ${shows.raw().message}"))
}
}
}
但是,这感觉非常非 kotlin,并且最终也可能导致代码重复,谁能给我指出一个在最佳实践中实现的示例?
【问题讨论】:
-
我可以就为什么这被否决获得一些反馈吗?
-
我无法解释为什么这被否决了。但是,您的问题是关于 Retrofit 的,并且在代码示例中似乎与 Retrofit 没有太大关系。而且,由于 Retrofit 本身是一个外部库,因此您的“没有外部库”声明相当奇怪。无论如何,如果您的 minimal reproducible example 能够显示您如何配置 Retrofit、如何定义 Retrofit API 以及此代码示例与这些内容的关系,将会有所帮助。
标签: android kotlin retrofit kotlin-coroutines android-networking