Java 从具有随机生成密钥的firebase获取数据

Java 从具有随机生成密钥的firebase获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,下面是我用来将值保存到firebase中的代码。它为每个值生成一个随机键。(我想保存冗余数据,所以这个方法是必要的) 这将创建如下结构: db-ai-34201 -...GenderOfName -...M4oLyB1ADGLWGJG4EgR ...gender:"Female" ...name: "akira" 现在我怎样才能从中获取数据。 当从我的android UI搜索名称时,我想获取性别。这是GenderOfName节点的侦听器,用于提取随机键

下面是我用来将值保存到firebase中的代码。它为每个值生成一个随机键。(我想保存冗余数据,所以这个方法是必要的)

这将创建如下结构:

db-ai-34201
-...GenderOfName
    -...M4oLyB1ADGLWGJG4EgR
        ...gender:"Female"
        ...name: "akira"

现在我怎样才能从中获取数据。
当从我的android UI搜索名称时,我想获取性别。

这是GenderOfName节点的侦听器,用于提取随机键下的数据:

ValueEventListener listener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       for(DataSnapshot snapShot:dataSnapshot.getChildren() ){
       //these are the values of gender and name for every random key
       //in GenderOfName node

           String gender = snapShot.child("gender").getValue(String.class);
           String name = snapShot.child("name").getValue(String.class);              
       }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
};
最后,将侦听器附加到该节点的引用以开始侦听它

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);
更新

您始终可以使用查询筛选结果:

与此相反:

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);
尝试此操作,它将根据您需要的名称为您提供特定的快照:

Query query = FirebaseDatabase.getInstance().getReference().child("GenderOfName").orderByChild("name").equalTo(theNameYouWant);
query.addValueEventListener(listener);

这是GenderOfName节点的侦听器,用于提取随机键下的数据:

ValueEventListener listener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       for(DataSnapshot snapShot:dataSnapshot.getChildren() ){
       //these are the values of gender and name for every random key
       //in GenderOfName node

           String gender = snapShot.child("gender").getValue(String.class);
           String name = snapShot.child("name").getValue(String.class);              
       }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
};
最后,将侦听器附加到该节点的引用以开始侦听它

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);
更新

您始终可以使用查询筛选结果:

与此相反:

reference = FirebaseDatabase.getInstance().getReference().child("GenderOfName");
reference.addValueEventListener(listener);
尝试此操作,它将根据您需要的名称为您提供特定的快照:

Query query = FirebaseDatabase.getInstance().getReference().child("GenderOfName").orderByChild("name").equalTo(theNameYouWant);
query.addValueEventListener(listener);

虽然这可以回答这个问题,但代码块本身通常不是有用的答案。建议您解释您正在展示的解决方案的作用,以及该代码为什么/如何回答此问题。@HasanBouTaam,我不理解此代码,它会从数据库中获取所有数据吗?我想获取应用程序UI中提到的特定名称的性别。@DeepChhowala您的问题是关于获取随机键的数据,而不是关于特定名称。@HasanBouTaam,不,我的问题有点不同,请检查上面我问题的最后一行。我在你的代码中尝试了一个if循环,它对我很有帮助,我不确定这是否是一个永久的解决方案。虽然这可以回答这个问题,但代码块本身通常不是有用的答案。建议您解释您正在展示的解决方案的作用,以及该代码为什么/如何回答此问题。@HasanBouTaam,我不理解此代码,它会从数据库中获取所有数据吗?我想获取应用程序UI中提到的特定名称的性别。@DeepChhowala您的问题是关于获取随机键的数据,而不是关于特定名称。@HasanBouTaam,不,我的问题有点不同,请检查上面我问题的最后一行。我在代码中尝试了一个if循环,它对我很有帮助,不确定这是否是一个永久的解决方案。