繁体   English   中英

Android Firebase:如何简单地获取某个键下的所有值?

[英]Android Firebase: How to simply get all the values under a certain key?

为了解决问题,是的,在SO上有一个类似的问题,但它并没有解释我的情况究竟是什么问题。

在Firebase实时数据库中,我有一个类似于以下内容的json树:

users{
   userid{
       templates{
          templateName1{  // example name that the user saves their template as.
                          // each template is an ArrayList
                  //templateName1 ArrayList contents
            }
          templateName2{ 
                  //templateName1 ArrayList contents
            }
          templateName2{ 
                  //templateName1 ArrayList contents
            }
       }
   }
}

我需要能够在“模板”中列出每个模板,而在其他时候只需获取特定模板的ArrayList值。 但是我似乎无法弄清楚如何做这个简单的事情。

从我在文档中搜索/阅读的内容来看,我的代码看起来应该是这样的:

DatabaseReference mTemplateRef = mDatabase.child("users").child(uid).child("templates");

    mTemplateRef.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    dataSnapshot.getChildren();

                    // somehow get the values here

                }
    });

当我调试,并输入表达式数据dataSnapshot.getChildren()时,我可以看到预期的内容,但我似乎无法将数据存入我的应用程序。 有任何想法吗?

这就是我要找的东西:

settingsRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                // easy
                String value = dataSnapshot1.getValue(String.class);                    
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

建议您使用getter,empty和参数化构造函数为模板创建一个类,如图所示

public class Template {

    String name;
    ArrayList<String> list;

    public Template() {
    }

    public Template(String name, ArrayList<String> list) {
        this.name = name;
        this.list = list;
    }

    public String getName() {
        return name;
    }

    public ArrayList<String> getList() {
        return list;
    }
} 

现在你可以轻松地做到这一点

    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot data : dataSnapshot.getChildren()){

                Template template = data.getValue(Template.class);
                // use this object and store it into an ArrayList<Template> to use it further

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

像这样的代码:

mTemplateRef.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                // dataSnapshot  itself  a child of   "templates"   
         DataSnapshot messageSnapshot= dataSnapshot;
                    DataType author =         (DataType)messageSnapshot.child("array").getValue();

                    // somehow get the values here

                }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM