android - Retrofit2+Kotlin 如何在获取响应作为数据类时查看原始 json

标签 android kotlin retrofit2

有一个服务文件:

interface DevbyteService {
    @GET("devbytes.json")
    fun getPlaylist(): Deferred<NetworkVideoContainer>
}

private val moshi = Moshi.Builder()
        .add(KotlinJsonAdapterFactory())
        .build()

object Network {
    // Configure retrofit to parse JSON and use coroutines
    private val retrofit = Retrofit.Builder()
            .baseUrl("https://devbytes.udacity.com/")
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .build()

    val devbytes = retrofit.create(DevbyteService::class.java)
}

因此,我得到了 NetworkVideoContainer 的列表。这很好用,但我还想看到一个原始的 json 答案,例如在日志中。 怎么做?

最佳答案

对于 Retrofit,您应该使用 HttpLoggingInterceptor

在你的 build.gradle 文件中添加依赖,如下所示

implementation("com.squareup.okhttp3:logging-interceptor:4.4.0")

然后如下所示为 Retrofit 对象设置一个 HttpLoggingInterceptor

private val retrofit = Retrofit.Builder()
                .baseUrl("https://devbytes.udacity.com/")
                .addConverterFactory(MoshiConverterFactory.create(moshi))
                .addCallAdapterFactory(CoroutineCallAdapterFactory())
                .client(okHttpClient)
                .build()

 private val okHttpClient = OkHttpClient.Builder().addInterceptor(
            HttpLoggingInterceptor().apply {
                level = HttpLoggingInterceptor.Level.BODY
            }
    ).build()

如果出现弃用警告,只需将 setLevel 更改为:

  level = HttpLoggingInterceptor.Level.BODY

上面的解决方案给你的 logcat 消息与由

设置的旧消息非常相似
  level = RestAdapter.LogLevel.FULL

关于android - Retrofit2+Kotlin 如何在获取响应作为数据类时查看原始 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478661/

相关文章:

android - 如何在Android中的BroadcastReceiver类中访问数据库?

java - Android ListView 未显示,但 json 数据存在

kotlin - 如何将此Java类重写为Kotlin数据类?

android - 互联网不稳定时处理访问 token 过期

android - 尝试在 Android Studio 中添加 Crashlytics(找不到方法...)

android - 使工具栏透明?

maven - 解决与 Maven 的库冲突

kotlin - 如何在 Kotlin 中创建无限长的序列

android - 使用相同的 url 前缀改造注释?

android - 发送 2 个对象模型作为 @body 改造的输入