从firebase树获取所有密钥

时间:2018-04-08 19:46:24

标签: java android firebase firebase-realtime-database

这是我的firebase树。

"LAMBO" : {
"LAMBO" : {
  "colour" : "blue",
  "date" : "08 04 2018",
  "doors" : "2",
  "enginesize" : "3000",
  "fuel" : "petrol",
  "lotnumber" : "99",
  "manufacturer" : "Lamborghini",
  "model" : "cuntash",
  "reg" : "LAMBO"
}
  }

"FIESTA" : {
"FIESTA" : {
  "colour" : "red",
  "date" : "08 04 2018",
  "doors" : "5",
  "enginesize" : "1300",
  "fuel" : "petrol",
  "lotnumber" : "1",
  "manufacturer" : "ford",
  "model" : "fiesta",
  "reg" : "FIESTA"
}
  }

等等......

当用户向树中添加更多汽车时,显然列表会变大。我希望能够获得树中所有项目的列表。但我不知道关键名称,因为我无法控制用户拥有的密钥。钥匙是=汽车登记所以每次都是独一无二的。

我通常接触孩子的方式是

 String lambo = datasnapshot.child("LAMBO").getValue(String.class) 

来自ChildEventListener。但我不知道(" KEYNAME")

我找到了这段代码

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        int i = 0;
        for(DataSnapshot d : dataSnapshot.getChildren()) {

        }
    }
}//onDataChange

@Override
public void onCancelled(DatabaseError error) {

}//onCancelled
});

我只想在列表视图中使用主键,即LAMBO和FIESTA也不是它的孩子。任何帮助将被赞赏和抱歉混淆

1 个答案:

答案 0 :(得分:0)

您可以使用DataSnapShot中的getKey():

List<String> keyList = new ArrayList<>();

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                keyList.add(ds.getKey());
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {

    }
});

希望它有所帮助!