#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() }