Комната и Livedata ложное положительное уведомление - PullRequest
0 голосов
/ 14 мая 2019

Я наблюдаю за следующим запросом на экране чата:

@Query("SELECT * FROM messages where conversationId = :conversationId order by id desc")
LiveData<List<Message>> getMessagesByConversationId(long conversationId);

Так что, если на этот разговор придет сообщение, мои наблюдатели будут уведомлены.Но проблема в том, что я обнаружил, что мои наблюдатели уведомляют, даже сообщение приходит к другому идентификатору разговора.Я предполагаю, что это большая проблема для огромных таблиц, потому что слишком много строк, и мой запрос будет выполняться каждый раз, когда сообщение приходит к другому разговору.Я думаю, что это неэффективно.

Как я могу сделать этот процесс более эффективным?

1 Ответ

0 голосов
/ 14 мая 2019

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

@Query("SELECT * FROM messages where conversationId = :conversationId order by id desc limit  :numberOfData :pageNumber")
LiveData<List<Message>> getMessagesByConversationId(long conversationId,long numberOfData,long pageNum);

, а в getMessagesByConversationId

вы можете использовать

int totalNumberOfRows=select count(*) from messages where conversationId = :conversationId ;(logic to get the number of data in query) 

pageNumber=totalNumberOfRows-(numberOfData *(pageNum-1));

вы получите минимум данных гораздо быстрее ..

Счастливое кодирование

...