Обработайте ошибку при фильтрации списка объектов в RxJava

#android #rx-java

Вопрос:

Здравствуйте, я выделяю каждый элемент из списка по отдельности в классе ViewModel, чтобы выполнить некоторые проверки для строки каждого элемента, которая возвращает логическое значение, и я обновляю это логическое значение в каждом элементе и возвращаю список. Но я не могу обновить еще один параметр в списке в качестве причины, которая будет Throwable.stacktrace() указана .

В ViewModel:

 fun validateList(list: List<TestModel>): Single<List<TestModel>> {  return Observable.fromIterable(list)  .toFlowable(BackpressureStrategy.LATEST)  .map { it.jsonString }  .map { it?.let { VerifiableObject(it) } ?: throw IllegalStateException("Json must not be null") }  .flatMapSingle { validate() }  .toList()  .map {  list.mapIndexed { index, testModel ->  (if (it[index] != null) {  //Updating boolean value here  testModel.isVerified = it[index].toString()  } else throw Exception("ERROR")); testModel  }  } }  

В Фрагменте:

 viewModel. validateList(arrayList)  .doFinally {  showLoading(false)  }  .asyncToUiSingle()  .subscribe({   //Updating UI  adjustCard(it)  }, {  it.printStackTrace()  })  .addTo(disposables)  

Тестовая модель:

 data class TestModel( val title: String, var isVerified: String? = null, var reason: String? = null)  

Здесь мне нужно вставить значение в reason поле, как только какой-либо элемент за исключением получит ложное значение. Пожалуйста, помогите мне, если у вас есть какие-либо идеи по этому поводу.

Комментарии:

1. Как насчет того, чтобы не выдавать эту ошибку, а присвоить ей какое-то значение TestModel.reason в else предложении?

2. но ошибка не приходит в другом случае. Он напрямую вызывает, чтобы подписаться на него.printstacktrace в момент ошибки.

3. Какова последовательность ошибок?

4. любая ошибка вызова API. Это не попадает в пункт else. Вот в чем причина. Я хочу в предложении else, чтобы я мог обновить aerialist с динамической ошибкой при правильном индексе arraylist.

5. Это validate неудача? Если да, то как проверить, не зависит ли это от текущего элемента?

Ответ №1:

Если validate это вызывает у вас проблемы, применитесь onErrorResumeNext к нему и превратите подпоследовательность обратно в исходный TestModel элемент:

 fun validateList(list: List<TestModel>): Single<List<TestModel>> {  return Observable.fromIterable(list)  .flatMapSingle { value ->  validate(VerifiableObject(value.jsonString))  .map {   value.isVerified = it.toString  value   }  .onErrorResumeNext {  value.reason = it.toString  Single.just(value)  }  }  .toList() }