Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
9 / 5 / 4
Регистрация: 05.10.2022
Сообщений: 33

Почему не срабатывает подписка на Flow?

03.05.2024, 17:17. Показов 462. Ответов 1

Студворк — интернет-сервис помощи студентам
Добрый день.

В приложении есть Room и Hilt (все модули SingletonComponent::class)
В приложении есть пара интерфейсов:
  1. SourceOfData - теоретически нужен для того, чтобы подписаться на Flow от Room и отправлять значения в SharedFlow, на который в свою очередь подписаны ViewModel(s)
  2. SomeUseCase - теоретически нужен для изменения БД

SourceOfData (подписка)
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class SourceOfDataImpl @Inject constructor(
    private val personDao: PersonDao,
    private val itemDao: ItemDao
) : SourceOfData {
 
    private val _personFlowMap = MutableSharedFlow<List<Person>>()
    val personFlowMap: SharedFlow<List<Person>> = _personFlowMap.asSharedFlow()
 
    init {
        subscribeToPersonMapWithItemDao()
    }
 
    private fun subscribeToPersonMapWithItemDao() {
        CoroutineScope(Dispatchers.IO).launch {
            combine(
                personDao.getPersons(),
                itemDao.getItems()
            ) { personEntityList, itemEntityList ->
                personEntityList.map { personEntity ->
                    Person(
                        personEntity.id,
                        personEntity.name,
                        itemEntityList
                            .filter { it.personId == personEntity.id }
                            .map { it.toItem() }
                    )
                }
            }.collect {
                _personFlowMap.emit(it)
            }
        }
    }
...


Проблема:
Если во ViewModel измение БД делать через SomeUseCase, то SharedFlow в SourceOfDataImpl не реагирует вообще, хотя БД вполне себе изменяется.
Если изменения делать через SourceOfData, то поток реагирует как надо.

Почему так и как сделать, чтобы мой поток от БД обновлялся назвисимо от интерфейса с изменениями?

Для наглядноости
Кликните здесь для просмотра всего текста

SourceOfDataImpl и SomeUseCaseImpl
Java
1
2
3
    override suspend fun addPerson(person: Person) {
        personDao.addPerson(PersonEntity(name = person.name))
    }
MainViewModel
Java
1
2
3
4
5
    //TODO("Example")
    suspend fun addPerson(personName: String) {
//        someUseCase.addPerson(Person(name = personName)) //TODO("Not OK")
//        sourceOfData.addPerson(Person(name = personName)) //TODO("OK")
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2024, 17:17
Ответы с готовыми решениями:

Не срабатывает подписка на событие
Приветствую, ребята. Есть проблемка, по какой-то причине не срабатывает подписка на событие, может что-то не так прописал. Есть устройство,...

Trust Flow (MajesticSEO) / Citation Flow (Majestic SEO) что это?
Что означает индекс = Trust Flow (MajesticSEO) / Citation Flow (Majestic SEO)? Где его можно использовать? Добавлено через 4 часа 3...

Почему Data Flow Analysis это static technique?
Согласно ответам на mock test для ISTQB exam, анализ потока данных почему-то статический. Хотя как он может быть статическим, мне...

1
9 / 5 / 4
Регистрация: 05.10.2022
Сообщений: 33
04.05.2024, 13:58  [ТС]
Проблема решена, тема не актуальна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2024, 13:58
Помогаю со студенческими работами здесь

Почему отменяется подписка на событие
Есть WPF окно и не стандартный контрол ColorPicker. Дописал событие OnChange которое происходит при движении мыши (в обработчике...

Почему не работает подписка на новости?
Привет всем. У меня есть скрипт подписки на новости исходный код работает во всех браузерах, я попытался вставить код в свой шаблон все...

Почему не срабатывает?
Почему следующий код работает: &lt;?php if (($_SERVER !== '/') || ($_SERVER !== '/index.php')): ?&gt; &lt;style type=&quot;text/css&quot;&gt; ...

Почему срабатывает for?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; long int fact ( int N ) { int f, i; for ( i=1, f=1 ; i &lt;= N ; i++ ) f*=i; return...

Почему не срабатывает Form1_KeyUp
private void Form1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Z) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru