У меня есть запрос на получение championList из базы данных комнат. Я просто хочу сделать еще один запрос, используя championId для каждого предмета. Поэтому я использовал Observable.fromIterable (). У меня есть два запроса в общей сложности, и оба они возвращаются наблюдаемые. Я объясню свой код ниже:
private fun getData() {
appDatabase.tierListDao().getChampionOfTier()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.concatMap {
Observable.fromIterable(it)
}
.doOnNext {
tierListMap[it.championTable!!.id!!] = TierChampionAndCounterPicks().apply {
tierAndChampion = it
}
}
.flatMap { tierAndChampion ->
appDatabase.counterPicksDao()
.getCounterPicksWithChampionId(tierAndChampion.championTable!!.id!!)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
.map {
tierListMap[it.first().counterPicksTable?.low_level_champion_id]?.apply {
counterPicksTableList = it
}?.let { tier ->
tierList.add(tier)
}
tierList
}
.toList()
.subscribe({
tierListAdapter = TierListAdapter(context!!, tierList)
tierListRv.adapter = tierListAdapter
}, {
it.printStackTrace()
})
}
Я сохраняю свой первый результат на карту с помощью doOnNext. С flatMap я делаю второй запрос, используя championId. Я также сохраняю свой второй результат на карту с помощью метода map (). После этого я хочу активировать метод подписки только один раз. Но без метода toList () подписка вызывается длиной моего списка. При использовании метода toList () подписка никогда не запускается. Как я могу это исправить?