Android Firebase数据库ArrayList未排序

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

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


要实现您想要的,您需要更改这行代码:

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());
          }
        }