Intereting Posts
Почему kotlin отказался от «нового» ключевого слова? Литеральный синтаксис класса для параметризованных классов в Котлине TornadoFX Обновление ItemViewModel, если объект Backing, не отображающий свойства JavaFX, изменен Оператор разрешения масштаба в Котлине Java generics в Kotlin: используйте Java raw type в качестве параметра метода в Kotlin Ошибка android-kotlin: неразрешенные ссылки привязки данных и ActivityMainBinding Android Kotlin: TextView.text работает не так, как ожидалось Опустить «Возврат» в Котлин нужен дополнительный код. Как это исправить? Активность Java не отображается в макете Как я могу получить случайное число в Котлине? почему kotlin lambda декомпилируется в java-код (Function0) null.INSTANCE Функции расширения Котлина по типу kotlin лямбда-выражения в качестве необязательного параметра Просмотры события касания заполняет весь экран Kotlin: Оператор '==' не может применяться к 'kotlin.Int' и 'Person?' ошибка

android – исключение Handle для обновления интерфейса

В моем приложении я хотел бы:

  • Попросите метод A внутри фрагмента
  • Из метода A вызывается метод B, который аннотируется с помощью `@Throws (IOException :: class)`
  • Из метода B вызовите метод C, который имеет `try catch` и в` catch` it `throw IOException (e)`
  • Получите ошибку внутри метода A и сделайте материал с информацией

Пока у меня есть:

fun methodA() { methodB() //Get exception and do stuff } @Throws(IOException::class) fun methodB() { methodC() } fun methodC() { try { //Something that can throw exception } catch (e: IOException) { throw IOException(e) } } 

Это правильный путь или исключение? Но все же, как мне получить, что исключение было выбрано внутри метода A? Я думал о чем-то вроде:

 fun methodA() { try { methodB() } catch (e: IOException) { //received exception thrown by method C and do stuff } } 

Смогу ли я добиться того, чего хочу от этого? Если нет, можете ли вы мне помочь?
благодаря

    Ваш код должен работать (если вы используете свою вторую версию methodA() ). Но почему вы methodC() исключение в methodC() , только чтобы выбросить новую копию? Вместо этого учтите следующее:

     fun methodA() { try { methodB() } catch (e: IOException) { // error flow } } @Throws(IOException::class) fun methodB() { methodC() } @Throws(IOException::class) fun methodC() { // do something that can throw exception } 

    IOException распространяется вверх к methodA() , где вы можете справиться с этим.

    Вы также можете подумать о том, чтобы уловить исключение глубже в стеке вызовов:

     fun methodA() { val err = methodB() if (err) { // error flow } else { // normal flow } } fun methodB(): Boolean { return methodC() } fun methodC(): Boolean { return try { // do something that can throw exception false } catch (e: IOException) { true } } 

    Теперь, какой из этих двух подходов вы должны использовать? Это зависит от вашего фактического кода. Вот обсуждение.

    (Еще одна проблема с кодом, который вы дали, заключается в том, что methodB() лишний. Но я буду считать, что он делает что-то интересное в вашей реальной программе.)