b-f*_*-fg 5 java android firebase firebaseui google-cloud-firestore
我正在尝试使用Cloud Firestore的Firebase-UI库创建聊天。 这个 github仓库包含我正在使用的相关代码。问题与查询的顺序有关。
看到查询指定为:
Query sChatQuery = sChatCollection.orderBy("timestamp").limit(50);
Run Code Online (Sandbox Code Playgroud)
但是,我以正确的顺序(从旧到新)获得了最旧的50条消息,而不是最新的消息。另一方面,我可以使用以下查询:
Query sChatQuery = sChatCollection.orderBy("timestamp", Query.Direction.DESCENDING).limit(50);
Run Code Online (Sandbox Code Playgroud)
这会检索50条最新消息,但顺序错误(最新消息排在最前面,最旧消息排在最下面)。因此,我不知道该怎么做。
我可以在本地再次反转查询的结果,但是我无法弄清楚该怎么做(我已经走过了FirebaseUI库,但运气不佳)。
编辑
chat对于events集合中的每个事件,我都有其子集合:
events/event_doc/chat/chat_doc
我想得到如下消息:
Message 1
Message 2
Message 3
Message 4
...
Run Code Online (Sandbox Code Playgroud)
使用默认顺序,我会收到如上所示的消息,但是limit说明将快照从1减少到50,并且Message 51(最新的)快照未被检索。
要解决此问题,您可以使用以下查询:
Query sChatQuery = sChatCollection
.orderBy("timestamp", Query.Direction.ASCENDING)
.whereGreaterThanOrEqualTo("timestamp', desiredTime)
.limit(50);
Run Code Online (Sandbox Code Playgroud)
如果您使用 aRecyclerView来显示数据,最简单的方法是使用以下代码:
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
Run Code Online (Sandbox Code Playgroud)
此方法将根据您的需要反转顺序。
另一种方法是创建您自己的适配器来扩展FirebaseListAdapter和重写getItem()方法,如下所示:
@Override
public HashMap getItem(int pos) {
return super.getItem(getCount() - 1 - pos);
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是从数据库中获取数据,将其添加到 a 中Collection,aList将是一个很好的解决方案,然后使用Collections.reverse(yourList);。
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |