使用ordeBy()和endBefore()时,Firestore降序分页返回0结果

时间:2018-08-05 13:03:24

标签: android firebase firebase-realtime-database google-cloud-firestore

我一直在研究Firebase Firestore,以及比其他聊天应用程序更好的示例项目。

我怎么想它会起作用:

  1. 用户输入片段时获取最新消息
  2. 更新std::vector<int> v{1,2,3,5,9,20,3}; // create a min heap std::make_heap(v.begin(), v.end(), std::greater<int>{}); // set 4th element to 35 in O(log n) set_heap_element(v.begin(), v.end(), v.begin() + 3, 35, std::greater<int>{}); // is the min-heap property satisfied? assert(std::is_heap(v.begin(), v.end(), std::greater<int>{})); ,将消息添加到回收者视图
  3. 当用户滚动到顶部oldestTimestamp并获得20条消息时,这些消息早于当前最早的一条消息
  4. 更新fecthMore,将消息添加到回收者视图

    在阅读order-limit-dataquery-cursors之后,我想出了这些解决方案,可惜它们都不起作用。

我使用了oldestTimestamp,但这返回了0条消息

在那之后,我尝试使用whereLessThanOrEqualTo("timestamp", previousOldestMessageTimestamp)与以前相同的结果

然后我尝试将查询简化为.orderBy("timestamp", Query.Direction.DESCENDING) .endBefore(previousOldestMessageTimestamp),该查询返回了一些消息,但列表中是整个会话中最早的消息

要使其正常运行(与每个聊天应用程序一样),我应该进行哪些更改?

您还能解释.orderBy("timestamp") .endBefore(previousOldestMessageTimestamp)whereLessThanOrEqualTo() + orderBy()

的区别吗?

这里是一些上下文

endBefore()

1 个答案:

答案 0 :(得分:1)

看起来开始/结束工作与实时数据库不同,因此需要更改

.orderBy("timestamp", Query.Direction.DESCENDING)
.endBefore(previousOldestMessageTimestamp)

.orderBy("timestamp", Query.Direction.DESCENDING)
.startAfter(previousOldestMessageTimestamp)

使其有效