如何为Firebase检索实时数据库的子元素

时间:2017-01-21 16:56:05

标签: android firebase firebase-realtime-database

我正在制作聊天应用,我成功地聊天功能。现在,我想防止重复的用户名。所以我需要Datasnapshot键的子元素。

我的Firebase结构。 enter image description here

我在主Activity中定义了Firebase数据库:

  FirebaseDatabase db;
创建

db=FirebaseDatabase.getInstance();

DatabaseReference dbref = db.getReference("Slitherio 1");
dbref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Iterable<DataSnapshot> keys = dataSnapshot.getChildren();
        for(DataSnapshot key :keys){

            Log.d("key",key.getValue().toString());

        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

key.getValue().toString()带来了msg和名字对。

01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=hey, name=admin}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=hello, name=SlitherP}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=h, name=harry}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=d, name=harry}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=s, name=s}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=d, name=d}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=d, name=d}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=selam, name=s}
01-21 19:18:57.168 15747-15747/gc.guideforslitherionohacknocheats D/key: {msg=ms, name=n}

但我想带上儿童元素的名称。 如何检索子元素的名称

2 个答案:

答案 0 :(得分:1)

创建消息类

public class Message {
    private String msg;
    private String name;

    // Add getters and setters
}

获取消息值

Message message = key.getValue(Message.class);
Log.d("key", message.getName());

答案 1 :(得分:0)

在您的活动中创建DatabaseReference:

DatabaseReference yourDBRef = FirebaseDatabase.getInstance().getReference("ChildName");
//If you have more than one child in your firebase database.
DatabaseReference refwithinref = yourDBRef.child("ChildName1"); 

yourDBRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapShot datasnapshot){
      String sample = datasnapshot.getValue(String.class);
      //Print the value of the child.
      Toast.makeText(getApplicationContext(),""+sample,Toast.LENGTH_SHORT).show(); 
}});