Retrofit2 + Kotlin как увидеть необработанный json при получении ответа в качестве класса данных - PullRequest
0 голосов
/ 01 марта 2020

Существует служебный файл:

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 ответ, например, в журналах. Как это сделать?

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

С Retrofit вы должны использовать HttpLoggingInterceptor

Добавить зависимость в ваш файл build.gradle, как показано ниже

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

И затем установить HttpLoggingInterceptor для объекта Retrofit, как показано ниже

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
2 голосов
/ 01 марта 2020

В Retrofit 2 вы должны использовать HttpLoggingInterceptor .

Добавить зависимость к build.gradle :

implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0'

Создать объект Retrofit:

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("YOUR_URL")
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

retrofit.create(ApiClient.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...