Получение данных HashMap LiveData через библиотеку комнат - PullRequest
0 голосов
/ 16 января 2019

У меня есть приложение для социальных сетей, которое отображает список пользователей, и мне нужен эффективный способ извлечения объекта из моих LiveData с использованием его первичного ключа.

Пример : Получить набор пользовательских POJO из моего LiveData >, предоставив СПИСОК пользовательских целых чисел (т. Е. Пользователей 12, 5, 7 и 1). Мне нужно иметь возможность искать этих пользователей по userId для отображения в соответствующем порядке в пользовательском интерфейсе.

Мне кажется, я хочу что-то более похожее на LiveData <<strong> Map >, но как я могу реализовать это, используя базу данных Room, не прерывая обратные вызовы LiveData из моей локальной БД -> Room - > LiveData -> UI?

ПРЕДЛОЖЕНИЕ 1 :

Измените реализацию моей комнаты так, чтобы она как-то возвращала LiveData, содержащую HashMap из .

Текущая реализация комнаты:

@Query("SELECT * FROM users WHERE user_id in :userIds LIMIT 1")
LiveData<List<User>> getUsers(List<Integer> userIds);

Предложенная реализация Room (не знаю, возможно ли что-то подобное или как это будет выглядеть):

@Query("SELECT * FROM users WHERE user_id in :userIds LIMIT 1")
LiveData<**HashMap**<Integer,User>> getUsers(List<Integer> userIds);

ПРЕДЛОЖЕНИЕ 2 :

Иметь список многих объектов LiveData ВНУТРИ карты:

Карта > liveDataUsers;

Это может быть чем-то, на что стоит обратить внимание, но я обеспокоен тем, что наличие сотен / тысяч объектов LiveData на карте - плохой дизайн и может также привести к проблемам с производительностью / слишком большому количеству открытых потоков внутреннего обратного вызова LiveData.

ПРЕДЛОЖЕНИЕ 3 :

Что-то еще ??? Я чувствую, что мне здесь чего-то не хватает. Как другие ищут объекты в своих LiveData, используя только свои primaryKey?

edit : это то, чего я хотел бы достичь на уровне Repo / Model, а не на уровне активности, так как эти LiveData будут повторно использоваться во всем приложении.

...