如何获得Firebase节点的随机子节点?

时间:2017-03-26 22:00:29

标签: java android firebase firebase-realtime-database

首先,这是我的数据库结构:

firebase database structure

我的目标是从“DE”节点获取一个随机的Question对象以便稍后显示它,并且由于没有内置支持查询随机子节点,我必须自己从该迭代器获取一个随机对象。 / p>

目前,我有这段代码,但对于如何将它串在一起很困惑:

    DatabaseReference questionsRef = FirebaseDatabase.getInstance().getReference().child("questions").child("DE");

questionsRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int questionCount = (int) dataSnapshot.getChildrenCount();
        int rand = random.nextInt(questionCount);
        Iterator itr = dataSnapshot.getChildren().iterator();
    }
    // onCancelled(){}
});

1 个答案:

答案 0 :(得分:1)

基本上,你需要做足够的itr.next(),直到迭代器位于n位置(其中n是来自nextInt()的随机数)然后你可以使用getValue()简单地获取您想要的对象,下面的示例应该很好地显示它:

questionsRef = FirebaseDatabase.getInstance().getReference().child("questions").child("DE");

questionsRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int questionCount = (int) dataSnapshot.getChildrenCount();
        int rand = random.nextInt(questionCount);
        Iterator itr = dataSnapshot.getChildren().iterator();

        for(int i = 0; i < rand; i++) {
            itr.next();
        }
        childSnapshot = (DataSnapshot) itr.next();
        question = childSnapshot.getValue(Question.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});