в моем файле DAO: < /p>
Код: Выделить всё
@Query(SELECT plantId FROM PlantView WHERE language = :language
fun getPlantByLang(language: String): Flow
@Query(SELECT plantId FROM PlantView WHERE location = :location
fun getPlantByLoc(location: String): Flow
< /code>
Теперь, в моем ViewController, я хочу, чтобы GetPlants возвращает поток растения, который является объединением двух потоков выше [Flow1, Flow2]. Один за другим. Итак, я могу собрать оба потока в одну в состоянии пользовательского интерфейса (файл экрана): < /p>
val plantList by viewModel.getPlants().collectAsState(emptyList())
< /code>
Причина, по которой я хочу эти два потока, и ни один запрос, потому что на самом деле каждый из них генерирует немного разные экземпляры растений, поэтому выход каждого потока будет по -разному введен в пользовательском интерфейсе, Быть внутри завода.fun getPlants (lang: String, loc: String) = getPlantByLang(lang).onCompletion{emitAll(getPlantByLoc(loc)}
< /code>
Но это возвращает только результаты первого потока (навес). Я предполагаю, что это из -за того, что этот запрос DAO является горячим потоком, который никогда не завершается.fun getPlants (lang: String, loc: String) = flowOf( getPlantByLang(lang), getPlantByLoc(loc) ).flattenConcat()
fun getPlants (lang: String, loc: String) = merge( getPlantByLang(lang), getPlantByLoc(loc) )
< /code>
и результат представляет собой бесконечный цикл получения первого потока, обновления пользовательского интерфейса, затем другой, обновления пользовательского интерфейса и т. Д. < /p>
идеи? Я предположил, что не должно быть так трудно объединить выходные потоки в один поток.
Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-kotlin
Мобильная версия