这是我的firebase
数据库。在第一个节点中,我有一个孩子 BeenThere ,在第二个节点中,我没有。我想检查 BeenThere 是否存在,是否不创建,是否存在,如何简单地检索它而没有任何模型或回调?有可能吗?
答案 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.......");