如何获得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) { } });