gpt4 book ai didi

android - 使用 Firebase Android 排序数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:14 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,其中使用 orderByChild() 的 Firebase 查询实际上并未对数据进行排序。下面是我要订购的数据的快照:(为了这个例子,总数是关闭的)

Snapshot of data

这是我到目前为止使用的代码:

Query query = locationComment.orderByKey();
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() == null) {
return;
}
data.clear();
adapter.notifyDataSetChanged();
String userId;
String time;
String comment;
Map<String, String> commentMap = (Map) dataSnapshot.getValue();
for (Map.Entry<String, String> entry : commentMap.entrySet()) {
if(!((entry.getKey()).contains("total"))) {
String[] keyString = (entry.getKey()).split(",");
time = keyString[0];
userId = keyString[1];
comment = entry.getValue();
Date resultdate = new Date(Integer.parseInt(time));
data.add(new Comment(comment,
DateFormat.getDateTimeInstance().format(resultdate), userId));
adapter.notifyItemInserted(data.size());
}
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

我得到了每一个键值对(除了总数),除了它没有按预期顺序排列(按键排序)。 Firebase 文档说,如果键不能解析为 32 位整数,则键按字典顺序排序。

无论哪种方式,顺序都应如图所示,但我在遍历 map 时返回的数据不是按此顺序排列的。

如果有人能指出正确的方向,我将不胜感激。谢谢!

最佳答案

当您执行查询时,您会得到三样东西:

  • 他们 key
  • 值(value)观
  • 这些之间的相对顺序

当您将结果转换为 Map 时,它只能容纳其中的两个,因此顺序丢失了。为防止这种情况,您应该使用 DataSnapshot.getChildren() 方法:

Query query = locationComment.orderByKey();
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() == null) {
return;
}
data.clear();
for (DataSnapshot child : dataSnapshot.getChildren()) {
...
}
adapter.notifyDataSetChanged();
}

另请参阅 Firebase 文档中有关使用列表的示例:https://firebase.google.com/docs/database/android/lists-of-data#listen_for_value_events

关于android - 使用 Firebase Android 排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com