如何在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
}
将新子项添加到参考节点时会触发此方法。但是如何通过类型转换获得特定孩子的价值
答案 0 :(得分:3)
添加的子项是dataSnapshot上返回的子项。所以,如果你想得到它的关键:
String myKey = dataSnapshot.getKey()
对于值:
String myKey = dataSnapshot.getValue(String.class)
对于您需要定义您期望的类型的值。在这个例子中,我指定了一个String,但你甚至可以将值转换为你正在使用的任何对象(只要字段在你的对象模型和dataSnapshot上匹配):
User myUser = dataSnapshot.getValue(User.class)
有关详细信息,请转到Firebase official documentation.
答案 1 :(得分:1)
在参考中,添加您的应用程序firebase控制台URL。
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) {
}
});
答案 2 :(得分:1)
根据数据库中的子节点和实体,您将需要一个模型类。
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ModelClass model = dataSnapshot.getValue(ModelClass.class)
//assuming this is used for list of data..
list.add(model);
}
即使子节点不可用或不是动态创建的,子事件侦听器也不会崩溃。您也不需要任何循环即可移动到下一个节点。
答案 3 :(得分:0)
如果您只想获取特定的子值,请执行此操作
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot.hasChild("name")){
String name = dataSnapshot.child("name").getValue().toString();
}
}