Значимые отзывы о вызовах для устранения проблем связи Kotlin okhttp3? - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю игрушечное приложение для изучения программирования на 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.

...