如何从Firebase实时数据库正确检索值? [英] How to properly retrieve value from Firebase Realtime Database?

查看:45
本文介绍了如何从Firebase实时数据库正确检索值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有以下数据结构:

请参见此处

名称可以有无限数量的子级.

name could have an unlimited number of children.

以及以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    
DatabaseReference dirFire = rootRef.child("messages").child("name");

 dirFire.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
 public void onDataChange(DataSnapshot dataSnapshot) {
    String name = dataSnapshot.getValue(String.class);
    //do what you want with the name
 }

 @Override
 public void onCancelled(DatabaseError databaseError) {

 }
 });

使用上面的代码,我无法获取 name 的值.如果客户端不知道 key ,如何获取 name ?

With the code above, I can't retrieve the value of name. How can I retrieve name if the key is unknown to the client?

推荐答案

请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    
DatabaseReference messagesRef = rootRef.child("messages");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();

            DatabaseReference keyRef = rootRef.child("messages").child(key).child("name");
            ValueEventListener valueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds1 : dataSnapshot.getChildren()) {
                        String name = ds1.getValue(String.class);
                        Log.d("TAG", name);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            keyRef.addListenerForSingleValueEvent(valueEventListener);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(eventListener);

这是另一种使用解决方案的方法,该解决方案看起来更早.

Here is another approach using a solution that looks like an earlier one.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    
DatabaseReference messagesRef = rootRef.child("messages");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            for (DataSnapshot nameSnapshot : ds.child("name").getChildren()) {
                String name = nameSnapshot.getValue(String.class);
                Log.d("TAG", name);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(eventListener);

输出将是:

John Miche
Joe Mitch
Sabr. A
Luis Jean

这篇关于如何从Firebase实时数据库正确检索值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆