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 } } 

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

Solutions Collecting From Web of "android – исключение Handle для обновления интерфейса"

Ваш код должен работать (если вы используете свою вторую версию 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() лишний. Но я буду считать, что он делает что-то интересное в вашей реальной программе.)