gpt4 book ai didi

android - Firebase 数据库 ArrayList 未排序

转载 作者:行者123 更新时间:2023-11-29 16:53:31 25 4
gpt4 key购买 nike

为什么我从 Firebase 数据库中检索到的列表没有使用 orderByKey() 排序?

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByKey();
transactions.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {

Map<String, Object> td = (HashMap<String,Object>) snapshot.getValue();
ArrayList<Object> values = new ArrayList<Object>();
values.addAll(td.values());
Log.d("Transactions", values.toString());
}

public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
});

ArrayList“值”是无序的。

这是一个json格式的结构示例:

"balance" : {
"users" : {
"log" : {
"-Kp0plO6zBeulHQ8S1Fj" : {
"In" : 100
},
"-Kp0qHM73Mcwbli1gaK6" : {
"Out" : -100
},
"-Kp0qgkORJx5sTi2rUZf" : {
"In" : 100
},
"-Kp1OCdSpUA7SEZhVoPR" : {
"In" : 100
},
"-Kp1OdtuuF6z_zlNj2St" : {
"In" : 100
}
}
}
}

最佳答案

当您从 Firebase 检索集合时,它会为每个子节点接收三段信息:

  1. child 的 key
  2. child 的值(value)
  3. child 的相对顺序

当您调用 snapshot.getValue() 时在您当前的代码中,您告诉 Firebase 将其转换为 Map<String, Object> .自Map是无序的,Firebase 客户端会保留键和值,但会丢失子项的顺序。

为确保您遵守订单,您必须使用 DataSnapshot.getChildren()处理结果:

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByKey();
transactions.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
ArrayList<Object> values = new ArrayList<Object>();
for (DataSnapshot child: snapshot.getChildren)) {
values.addAll(child.getValue());
}
}

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

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