[Пожалуйста, проверьте обновление 2]
Я пытаюсь осуществить модернизацию с Kotlin. Пожалуйста, посмотрите на следующий код:
Вот основной метод модернизации, который должен получить пользователь из API (Webservice):
const val BASE_URL = "https://jsonplaceholder.typicode.com"
fun getUser(userId: Int){
val loggingInterceptor = HttpLoggingInterceptor()
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
val user = retrofit.create(Api::class.java)
val userObject : Call<ResponseBody> = user.getUser(userId)
userObject.enqueue(object : Callback<ResponseBody>{
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
e(javaClass.simpleName, "loginResponse: $call")
e(javaClass.simpleName, "loginResponse: ${t.printStackTrace()}")
}
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
e(javaClass.simpleName, "loginResponse: ${response.raw()}")
e(javaClass.simpleName, "loginResponse: ${response.code()}")
e(javaClass.simpleName, "loginResponse: ${response.message()}")
}
})
}
API-интерфейс:
interface Api {
@GET("users/{id}")
fun getUser(
@Path("id") id: Int
): Call<ResponseBody>
}
Теперь проблема заключается в методе обратного вызова enqueue, onResponse и onFailure не печатает никаких журналов. Но я получаю логи, запрос Http успешен от OkHttpClient. Если я использую эквивалентный код Java, все работает просто отлично. Я провел целый день в поисках решения. и пробовал разные подходы, но ничего не получается. Любая помощь приветствуется.
ОБНОВЛЕНИЕ:
На данный момент я использую его эквивалентный код Java следующим образом, который прекрасно работает:
userObject.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NotNull Call<ResponseBody> call, @NotNull Response<ResponseBody> response) {
e(TAG, "loginResponse: " + call);
e(TAG, "loginResponse: " + response.string());
}
@Override
public void onFailure(@NotNull Call<ResponseBody> call, @NotNull Throwable t) {
e(TAG, "loginResponse: " + call);
e(TAG, "loginResponse: ", t);
}
});
Хотя яЕсли оставить этот вопрос нерешенным, кто-то может найти / узнать решение для него. Или, если я найду это в будущем, я обновлю это.
ОБНОВЛЕНИЕ 2
Это была глупая ошибка, или я даже не могу сказать, что это была ошибка,На самом деле произошло то, что журналы не печатались этими методами. Но когда я поместил Toast в эти методы, он отобразил тост с ответом.
Итак, я узнал, что журналы Android не всегда надежны, поэтому, когда вы застряли с журналами, всегда пытайтесьи использовать тосты или методы интерфейса. Так что это ответ на мой вопрос.
Но кто-нибудь может сказать мне, почему эти журналы не распечатаны, это тоже было бы очень полезно.