首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获得Firebase节点的随机子节点?

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

Stack Overflow用户
提问于 2017-03-26 22:00:29
回答 1查看 2.7K关注 0票数 1

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

我的目标是从"DE“节点获得一个随机问题对象,以便稍后显示它,而且由于没有内置的查询随机子对象的支持,我必须自己从迭代器中获得一个随机对象。

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

代码语言:javascript
代码运行次数:0
运行
复制
    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(){}
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-26 22:00:29

基本上,您只需完成足够的itr.next()操作,直到迭代器位于n第四位置(其中n是来自nextInt()的随机数),然后您就可以使用getValue()获得您想要的对象,下面的示例将很好地展示它:

代码语言:javascript
代码运行次数:0
运行
复制
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) {

    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43035087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档