Попытка объединить два потока из комнаты Dao -запрос без успеха в КотлинAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Попытка объединить два потока из комнаты Dao -запрос без успеха в Котлин

Сообщение Anonymous »

Я хочу объединить результаты двух запросов SQL, которые я реализовал с помощью библиотеки комнаты. Я помесчу пример, чтобы представить его более четко: < /p>
в моем файле 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()
Наконец, я попытался использовать Merge , надеясь хотя бы получить оба потока в одном, кроме того, они не будут один за другим:
fun getPlants (lang: String, loc: String) = merge( getPlantByLang(lang), getPlantByLoc(loc) )
< /code>
и результат представляет собой бесконечный цикл получения первого потока, обновления пользовательского интерфейса, затем другой, обновления пользовательского интерфейса и т. Д. < /p>
идеи? Я предположил, что не должно быть так трудно объединить выходные потоки в один поток.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»