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

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

firebase数据库结构

我的目标是从“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(){} }); 

基本上,你只需要做足够的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) { } });