【问题标题】:Firebase Android how to handle onChildAddedFirebase Android 如何处理 onChildAdded
【发布时间】:2016-06-08 09:57:24
【问题描述】:
如何在 firebase android 中处理 onChildAdded 事件。
下面是我的数据库 json 结构
{
message{
"id"=10;
"name"="xyz"
}
}
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// how can I handle the particular child that has added
}
当一个新的孩子被添加到我的参考节点时,这个方法就会触发。但是如何在不进行类型转换的情况下获得特定孩子的价值
【问题讨论】:
标签:
android
firebase
firebase-realtime-database
【解决方案1】:
添加的孩子是 dataSnapshot 上返回的孩子。所以,如果你想得到它的关键:
String myKey = dataSnapshot.getKey()
对于值:
String myKey = dataSnapshot.getValue(String.class)
对于您需要定义您期望的类型的值。在这个例子中,我指定了一个字符串,但你甚至可以将值转换为你正在使用的任何对象(只要你的对象模型和 dataSnapshot 上的字段匹配):
User myUser = dataSnapshot.getValue(User.class)
更多详情请到Firebase official documentation.
【解决方案2】:
在参考中,添加您的应用程序 Firebase 控制台网址。
DatabaseReference myFirebaseRef = database.getReference("Your firbase path");
myFirebaseRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.hasChild("message")) {
for (DataSnapshot poly : dataSnapshot.child("message").getChildren()) {
String id=String.valueOf(poly.child("id").getValue);
String name=String.valueOf(poly.child("name").getValue);
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s)
{
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
【解决方案3】:
您将需要一个模型类,根据您在数据库中拥有的子节点和实体。
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ModelClass model = dataSnapshot.getValue(ModelClass.class)
//assuming this is used for list of data..
list.add(model);
}
即使子节点不可用或尚未动态创建,子事件侦听器也不会崩溃。您也不需要任何循环来移动到下一个节点。
【解决方案4】:
如果您只想获取特定的子值,请执行此操作
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.hasChild("name")){
String name = dataSnapshot.child("name").getValue().toString();
}
}