Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查是否存在子级,并从firebase检索简单数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 检查是否存在子级,并从firebase检索简单数据

Android 检查是否存在子级,并从firebase检索简单数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,这是我的firebase数据库。在第一个节点中,我有一个子节点,在第二个节点中没有。我想检查是否存在,如果没有创建一个,如果存在,如何简单地检索它,而不需要任何模型或回调?有可能吗?注意:没有回拨,您无法读取任何数据。 现在您必须了解firebase中的回调之间的区别,有3个回调(所有这3个回调都被视为数据读取器): 添加的子项: 在添加子项时触发。(这不是你需要的) 值事件侦听器: 在添加或修改子项时触发。(这不是你需要的) 单值事件的侦听器: 仅在连接后触发,不会再次触发(这是您需要的) 因


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

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

现在您必须了解firebase中的回调之间的区别,有3个回调(所有这3个回调都被视为数据读取器):

添加的子项:

在添加子项时触发。(这不是你需要的)

值事件侦听器:

在添加或修改子项时触发。(这不是你需要的)

单值事件的侦听器:

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

因此,正如您现在所看到的,当您需要只读取必须为单值事件调用
侦听器的数据时

示例:

假设您要检查某个随机id下是否存在
been
,您必须执行以下操作:

//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){

}
});

}
如果您对随机id感到困惑,它只是您在数据库结构中拥有的id(例如:ChIJZZ………),您需要传递该id以检查其下是否存在

假设我想检查ChIJZZ下是否存在……我这样做:

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

所有从数据库获取数据的Firebase API都涉及回调。我尝试了ValueEventListener,但它只在添加或修改数据时返回结果。我只想简单地阅读数据。请编辑您的问题以显示您尝试过的代码,并解释它如何不满足您的需要。你现在描述的问题听起来与你目前在问题中所写的非常不同。我将尝试一下并通知你!谢谢你的时间和回答:)我明白了。如果它在那里,我可以检查BeenTherr是否在那里,如果没有,则将其设置为0。但是如何读取这些数据呢
dataSnapshot.child(“BeenThere”).getValue()
我尝试过并导致错误。@BikramNath我更新了代码,以便您可以获取(BeenThere)的值。编辑可以在onDataChange()方法中包含的注释(这是编辑**)下找到。你真是一个了不起的人!这很好用。我尝试并成功地使用了一种混乱的方法,将数据作为字符串获取,然后转换为int:D(谢谢,伙计:)