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

时间:2016-10-04 19:31:01

标签: java android firebase firebase-realtime-database

为了解决这个问题,是的,在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值。但是我似乎无法弄清楚如何做这个简单的事情。

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

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()时,我可以看到预期的内容,但我似乎无法将这些数据存入我的应用程序。有任何想法吗?

3 个答案:

答案 0 :(得分:2)

这就是我想要的:

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) {

        }
    });

答案 1 :(得分:1)

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

def closest_power(base, num):
    bevaluate = True
    exponent = 0
    vale = 0 
    older = 0
    olders = 0
    while bevaluate:
        vale = base ** exponent
        if vale < num:
            older = num - vale
            exponent+=1
        else:
            olders = vale - num
            if older == olders :
                if num == 1:
                    exponent = 0
                else:
                    exponent-=1
                break
            elif older < olders:
                exponent-=1
                break            
            bevaluate = False

    return  exponent

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

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;
    }
} 

答案 2 :(得分:0)

类似这样的代码:

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

                }
    });