#android #okhttp
#Android #okhttp
Вопрос:
Я создаю клиент api, используя модернизацию с помощью этого метода:
private fun createNewApiClient(authRefreshClient: AuthRefreshClient,
preferencesInteractor: PreferencesInteractor): ApiClient {
val loggingInterceptor = HttpLoggingInterceptor(PrettyLogger())
loggingInterceptor.level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
val okHttpClient = createHttpClientBuilder()
.addInterceptor(loggingInterceptor)
.build()
return Retrofit.Builder()
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(Interactors.apiEndpoint)
.build()
.create(ApiClient::class.java)
}
Для отладки установлено значение true в моем сгенерированном файле BuildConfig:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
}
Я могу подтвердить, что вызов, который я делаю с этим клиентом, выполняется, потому что я поместил оператор lot в выбрасываемую часть подписки RX:
Interactors.api.apiClient.getUserByEmail(email).
.subscribe({
Log.d("Email exists")
//Success
}, {
Log.e("Call is failing")
}
})
Но тело запроса не отображается в моих инструкциях журнала. Ничего из okhttp не отображается. Что не так с моей реализацией okhttp?
Комментарии:
1. Вы уверены, что у
BuildConfig
вас естьtrue
значение? Вы вошли в этот класс после компиляции?2. Этот класс создается в процессе компиляции. Я также удалил оператор if и установил уровень ведения журнала на полный во всех случаях, и он все равно не работал.
3. Может быть, с этим проблема
PrettyLogger()
? Попробуйте использоватьHttpLoggingInterceptor.Logger
из библиотеки.4. В этом и заключалась хитрость. Спасибо!
Ответ №1:
Попробуйте заменить ваш PrettyLogger()
на logger из HttpLoggingInterceptor
Так что замените свой:
val loggingInterceptor = HttpLoggingInterceptor(PrettyLogger())
в:
val loggingInterceptor = HttpLoggingInterceptor()