我有一个像这样的Firebase数据库,我希望得到推送生成ID的子项,例如correcta
。
到目前为止,我已经做到了这一点,但它永远不会得到任何东西:
mdatabase=FirebaseDatabase.getInstance().getReference().child("Questions");
mdatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key=dataSnapshot.getKey();
DatabaseReference questiondatabase=mdatabase.child(key);
questiondatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, String> itemPrice = dataSnapshot.getValue(Map.class);
txtpregunta=itemPrice.get("pregunta");
txtopcion1=itemPrice.get("opcion1");
txtopcion2=itemPrice.get("opcion2");
txtopcion3=itemPrice.get("opcion3");
txtopcion4=itemPrice.get("opcion4");
Map<String, Integer>correctagetter = dataSnapshot.getValue(Map.class);
correcta=correctagetter.get("correcta");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
由于
答案 0 :(得分:2)
将值侦听器附加到节点时,将获得包含该节点下所有数据的快照。您不必附加更多侦听器即可在树中更深入地获取数据。
相反,您只需要遍历快照的子项:
DatabaseReference questionsRef = FirebaseDatabase.getInstance().getReference().child("Questions");
questionsRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot questionsSnapshot) {
for (DataSnapshot questionSnapshot: questionsSnapshot.getChildren()) {
String questionKey = questionSnapshot.getKey();
String pregunta = questionSnapshot.child("pregunta").getValue(String.class);
String opcion1 = questionSnapshot.child("opcion1").getValue(String.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
我高度建议你选择Firebase codelab for Android。