Я создаю игрушечное приложение для изучения программирования на Kotlin и Android (и я опытный бэкэнд-разработчик Java).Используя библиотеку okhttp3 с блоком try-catch, я получаю локализованное сообщение «null» и шестнадцатеричный адрес в качестве трассировки стека toString (как показано ниже).Без блока обработки исключений приложение аварийно завершает работу симулятора Android.
При проблемах чтения на okhttp3, например Обработка исключений в Android из Web API , объект Response должен включать тип сбоя связи- но это явно не передается в исключение.Я мог бы попытаться перечислить типы исключений и обработать каждое из них явно, но это может быть много кода для того, что кажется тривиальной проблемой.
«Логика печати» была добавлена для понимания отладки.Другие методы анализа кажутся еще менее ценными и имеют большую кривую обучения (например, различные окна ADK производят большое количество выходных событий, не включая интересующие коммуникационные события)
Обратите внимание, что выполнение вызовакак работает GET в Postman.
fun callUrl (url: String) {
var toPrint = "";
try {
val apiKey: String = getString(R.string.bibleApiKey)
val request = Request.Builder()
.header("api-key", apiKey)
.url(url)
.build()
val thisCallback = MyCallback()
toPrint += " @@1 "
var call = client.newCall(request)
toPrint += " @@2 "
var response = call.execute() // Synchronous
//call.enqueue(thisCallback) // Assynchronous
toPrint += " @@3 "
toPrint += passageShown.getText().toString() + "Results of call to URL:" + response.body()?.string()
toPrint += " @@4 "
}
catch (e : Exception) {
print(e.message)
print(e.stackTrace.toString())
toPrint += passageShown.text.toString()+ "\n " + e.localizedMessage + " \n " +
e.getStackTrace().toString()
}
passageShown.setText(toPrint)
}
Трассировка стека и нулевое сообщение отображаются на снимке экрана.Чтобы отобразить их, я поместил их в текстовое поле моего приложения для Android.
Я загружу изображение вывода, если мне позволяет stackoverflow.