检查孩子是否在场,并从Firebase中检索简单数据

时间:2018-06-23 19:25:41

标签: android firebase firebase-realtime-database

enter image description here

这是我的firebase数据库。在第一个节点中,我有一个孩子 BeenThere ,在第二个节点中,我没有。我想检查 BeenThere 是否存在,是否不创建,是否存在,如何简单地检索它而没有任何模型或回调?有可能吗?

1 个答案:

答案 0 :(得分:1)

注意:没有回叫,您将无法读取任何数据。

现在,您必须了解Firebase中回叫之间的区别,共有3个(并且这3个都被视为数据读取器):

已添加子级

添加孩子时触发。 (这不是您所需要的。)

价值事件监听器:

添加或修改孩子时触发。 (这不是您所需要的。)

单值事件的侦听器:

仅在将其连接后触发,并且不会再次触发(这是您需要的)。

因此,如您现在所见,您只需简单地读取数据就必须调用Listener for single value event

示例:

让我们说您要检查BeenThere是否存在于某个随机ID下,您必须执行以下操作:

//this is a method that you call when you need to read the node and do the check.

public void checkBeenThere(String random_id){

DatabaseReference places_ref = FirebaseDatabase.getInstance().getReference().child("Places");

places_ref.child(random_id).addListenerForSingleValueEvent(new ValueEventListener(){

@Override
public void onDataChange(DataSnapshot datasnapshot){

//check if Been there exist
if(datasnapshot.hasChild("BeenThere")){
//been there is found

//get the value of been there (THIS IS THE EDIT***).

 int been_there = datasnapshot.child("BeenThere").getValue(Integer.class); 




}else{
//been there is not found

//add it under the specific random id
places_ref.child(random_id).child("BeenThere").setValue(0);


}


}
@Override
public void onCnacelled(DatabaseError error){

}
});

}

如果您对random_id感到困惑,它只是您在数据库结构中拥有的那个id(例如:ChIJZZ .........),则需要传递该id来检查下是否存在该ID。它。

所以可以说我想检查ChIJZZ下是否存在..........,我这样做:

//you must type the whole id, I added .... because it is long.
checkBeenThere("ChIJZZ_sM.......");