【发布时间】:2018-06-12 22:28:58
【问题描述】:
我的 android 应用程序有一个 firebase 数据结构,我想从 push() 方法生成的随机键中检索数据,该方法是 Forum 节点的子节点,它是数据库根节点的子节点。请建议我一种方法来做到这一点。谢谢。
【问题讨论】:
标签: java android firebase firebase-realtime-database
我的 android 应用程序有一个 firebase 数据结构,我想从 push() 方法生成的随机键中检索数据,该方法是 Forum 节点的子节点,它是数据库根节点的子节点。请建议我一种方法来做到这一点。谢谢。
【问题讨论】:
标签: java android firebase firebase-realtime-database
您可以获得父“论坛”节点的所有子节点。只需使用 getChildren() 方法。然后在索引位置随机选择一个子节点。
DataSnapshot snapshot = dataSnapshot.child("Forums");
Iterable<DataSnapshot> children = snapshot.getChildren();
for (DataSnapshot child: children) {
Object obj = child.getValue(Object.class);
}
【讨论】:
要显示Forums节点下所有子节点的值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference forumsRef = rootRef.child("Forums");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
String ques = ds.child("ques").getValue(String.class);
String title = ds.child("title").getValue(String.class);
String uid = ds.child("uid").getValue(String.class);
Log.d("TAG", name + " / " + ques + " / " + title + " / " + uid);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
forumsRef.addListenerForSingleValueEvent(valueEventListener);
【讨论】:
首先你应该编写你的类模型 "FormusModel" 来存储来自服务器的数据 你可以用这个
> >
rootRef.child("Forums").addChildEventListener(new
> ChildEventListener() {
> > @Override
> > public void onChildAdded(DataSnapshot dataSnapshot, String s) {
> > ForumsModel model = dataSnapshot.getValue(FormusModel.class);
//now you can use model.getname();....
> }
注意:您必须实现另一个方法,例如 onChildCahnge 监听器
【讨论】: