【问题标题】:Get the values of a child获取孩子的价值观
【发布时间】:2018-07-24 11:57:42
【问题描述】:

-messages
   --LIB38128eG7v
      -receiverID: "yoon"
      -senderID: "kim"
      -text: "good day"
   --LIB36334eG9e
      -receiverID: "yoon"
      -senderID: "kim"
      -text: "good night"

这是我的 firebase 数据库。 并且有一个名为Chat 的类,它有receiverIDsenderIDtext。 我可以通过

获取消息的所有数据
ref.child("messages").addChildEventListener(new ChildEventListener(){
   public void onChildAdded(Datasnapshot dataSnapshot, String s){
   Chat chat = dataSnapshot.getValue(Chat.class);
   mChat.add(chat); //mChat is an array of Chat
 ....
}

但我想获取LIB38128eG7v 的数据,而不是所有消息。在这种情况下,我怎样才能获得孩子的孩子价值观之一? 有什么办法不使用监听器?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    如果不使用侦听器,就无法从 Firebase 数据库中获取数据。 Firebase 中的一切都是关于听众的。要获取-LIB38128eG7v下的数据,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference messageIdRef = rootRef.child("messages").child("-LIB38128eG7v");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Chat chat = dataSnapshot.getValue(Chat.class);
            Log.d("TAG", chat.getText());
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    messageIdRef.addListenerForSingleValueEvent(valueEventListener);
    

    您的 logcat 中的输出将是:good day

    【讨论】:

      【解决方案2】:

      我认为这样会起作用

      DatabaseReference rootRef = 
      FirebaseDatabase.getInstance().getReference().child("messages").child("- 
      LIB38128eG7v");
       rootRef.addChildEventListener(new ChildEventListener() {
              @Override
              public void onChildAdded(DataSnapshot dataSnapshot, String s) {
      
              //your code
              }
      
              @Override
              public void onChildChanged(DataSnapshot dataSnapshot, String s) {
      
              }
      
              @Override
              public void onChildRemoved(DataSnapshot dataSnapshot) {
      
              }
      
              @Override
              public void onChildMoved(DataSnapshot dataSnapshot, String s) {
      
              }
      
              @Override
              public void onCancelled(DatabaseError databaseError) {
      
              }
          });
      

      【讨论】:

        猜你喜欢
        • 2014-06-13
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多