Наблюдаемый отIterable не вставляет элемент в комнату - PullRequest
0 голосов
/ 06 октября 2019

Я столкнулся с очень странной проблемой и понятия не имею, почему это происходит. Когда у меня есть поток с fromIterable для вставки в элементы Room один за другим, он не вставляется. Без исключений, ничего. Я даже поставил точку останова для сгенерированного класса реализации Room DAO, он вызывает метод, но не входит в блок Completable, просто игнорируя его.

repository.insert(mapper.transform(item))
                    .flatMap { id ->
                        Observable.fromIterable(item.tags)
                                .map { tag ->
                                    anotherRepository.insert(
                                            JoinEntity(id, tag.id)
                                    )
                                }
                                .toList()
                                .flatMap { Single.just(id) }
                    }

Но если я удалю fromIterable и заменим прямым вызовом вставки, он сработает и вставит нормально. Без каких-либо других изменений.

repository.insert(mapper.transform(item))
                    .flatMap { id ->
                        anotherRepository.insert(JoinEntity(1, 1))
                                .andThen(Single.just(id))

                    }

Я уже столько всего перепробовал и до сих пор не имею идей. Пробовал flattenAsFlowable, тоже не работает.

Буду признателен за любую помощь. Спасибо!

1 Ответ

1 голос
/ 07 октября 2019

Ладно, выяснил проблему, может, кому-нибудь поможет.

repository.insert(mapper.transform(item))
                    .flatMap { id ->
                        Observable.fromIterable(item.tags)
                                .filter { tag -> tag.id != null }
                                .flatMapSingle { tag -> anotherRepository.insert(JoinEntity(id, tag.id)) }
                                .toList()
                                .flatMap { Single.just(id) }
                    }

Я изменил map/flatMap на flatMapSingle, поэтому он фактически излучается.

...