Android Firebase数据库ArrayList未排序
为什么我从Firebase数据库检索到的列表没有按orderByKey()排序Android Firebase数据库ArrayList未排序,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,为什么我从Firebase数据库检索到的列表没有按orderByKey()排序 要实现您想要的,您需要更改这行代码: transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByKey(); 与 从Firebase检索集合时,它会为每个子节点接收三条信息: 孩子的钥匙 孩子的价值 孩子的相对顺序 在当前代码中调用snapshot.getValue()时,您会告诉Fireba
要实现您想要的,您需要更改这行代码:
transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByKey();
与
从Firebase检索集合时,它会为每个子节点接收三条信息:
snapshot.getValue()
时,您会告诉Firebase将其转换为映射。由于映射
是无序的,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());
}
}
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference();
transactions=mDatabase.child(“余额”).child(“用户”).child(用户ID).child(“日志”).orderByKey();
transactions.addValueEventListener(新的ValueEventListener(){
公共无效onDataChange(数据快照快照){
ArrayList值=新的ArrayList();
for(DataSnapshot子项:snapshot.getChildren)){
values.addAll(child.getValue());
}
}
请添加数据库structure@AlexMamo添加了哪些键?您想按哪些键排序?此Kp0plO6zBeulHQ8S1Fj,Kp0qHM73Mcwbli1gaK6键?@AlexMamo我想对值(+100,-65…)排序从Kp0plO6zBeulHQ8S1Fj到Kp1OCdSpUA7SEZhVoPR,+100
、-65
等等的密钥是什么?+100
,-65
只是值。谢谢,但我的列表仍然无序;在使用orderByChild(“In”)后。您所有的孩子是否都有“In”
“In”而不是“Out”
就像你的JSON文件一样。因为如果有不同的,顺序就不起作用了。是的,你说得对。有一个孩子有另一个名字。也可以点这个吗?
transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByKey();
transactions = mDatabase.child("balance").child("users").child(userid).child("log").orderByChild("In");
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());
}
}