【问题标题】:Accessing Firebase Database Objects Below Child访问子级以下的 Firebase 数据库对象
【发布时间】:2018-10-08 03:29:21
【问题描述】:

我有一个这样的数据结构:

我在 Polls 引用中调用 .addListenerForSingleValueEvent(),并且我有一个 Pojo 类映射到投票。但是,由于我不知道密钥的值,我无法访问我的投票项目。有没有办法访问,比如说,display_name,还是我需要知道键的值?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    如果您对要显示的民意调查一无所知,最好的办法就是显示所有民意调查。这可以通过将侦听器附加到/Polls 来完成:

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Polls");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot pollSnapshot: dataSnapshot.getChildren()) {
                Poll poll = pollSnapshot.getValue(Poll.class);
                String key = pollSnapshot.getKey();
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
    

    如果您想访问特定的民意调查,您必须知道可以唯一标识该民意调查的信息。最简单的是知道它的密钥,在这种情况下你可以像这样加载它:

    String key = "-LNlisBxkPbxd00a_QH";
    ref.child(key).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Poll poll = pollSnapshot.getValue(Poll.class);
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
    

    如果你不知道key,你需要知道poll的一个属性的值来选择。例如,要获取问题 y89yuvyu 的所有民意调查,您可以使用以下命令查询该孩子:

    ref.orderByChild("question").equalToChild("y89yuvyu").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot pollSnapshot: dataSnapshot.getChildren()) {
                Poll poll = pollSnapshot.getValue(Poll.class);
                String key = pollSnapshot.getKey();
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
    

    由于该问题值可能有多个民意调查,因此您需要像我上面所做的那样再次循环结果。

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 2018-08-04
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多