Как легко получить вложенные данные базы данных Firebase в реальном времени для приложения чата в Java? - PullRequest
0 голосов
/ 17 октября 2018

Я пишу приложение для чата, в котором мне нужно проверить, был ли у двух пользователей u1 и u2 предыдущий разговор или нет.Если они есть, то получите conversationId и отправьте сообщения этой конечной точке.В противном случае создайте новый диалог.

Моя структура данных выглядит примерно так.

userconversations:
    userId1:
        conversationID1:
            participants:
                user1: true
                user2: true
         conversationID2:
             participants:
                user1: true
                user7: true

В моем приложении я хочу прочитать все данные из userconversations/userId1 и выполнить итерацию по списку для отображенияесли 1010 * является частью разговора или нет.

Мой вопрос заключается в том, как мне спроектировать свой класс, чтобы быстро десериализовать эти данные и избежать итераций по ним с помощью вызовов getChildren()?

Если я нормализую данные и сохраню различное отображение conversationId -> participants, то для каждого размер разговора мне придется запросить этот поток, чтобы получить данные.Учитывая, что у пользователя может быть 100 разговоров, это будет невероятно медленным и ресурсоемким.

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

1 Ответ

0 голосов
/ 18 октября 2018

Поскольку ключи user1, user2 и user7 являются динамическими, их нельзя автоматически сериализовать в свойствах POJO.Лучшее, что вы можете сделать, это получить Map<String, boolean> из participants с помощью GenericTypeIndicator или приведения: (Map<String, boolean>)snapshot.child("participants").getValue().

...