【问题标题】:How does one get a random children of a Firebase node?如何获得 Firebase 节点的随机子节点?
【发布时间】:2017-03-26 22:00:29
【问题描述】:

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

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

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

    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(){}
});

【问题讨论】:

标签: java android firebase firebase-realtime-database


【解决方案1】:

基本上,你只需要做足够的itr.next() 直到迭代器位于nth 位置(其中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) {

    }
});

【讨论】:

  • 如果你的数据库很大,你可以使用Firebase Functions来达到这个目的!
猜你喜欢
  • 2019-01-03
  • 1970-01-01
  • 2018-09-22
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多