编辑2;值得放在最前面:我认为值得一提的是,这实际上是在此快照下载所有数据,以检查是否存在任何数据。你应该在这里留意。如果引用是巨大的(例如实际上是根引用而不是特定的子/属性),那么您应该找到一个更深的节点,您可以使用它来检查存在或设计不同的数据结构,因此可以进行高效的检查。
数据库引用实际上是该数据的URL。你想要得到数据来查看是否存在小孩。这就是为什么你似乎在寻找的方法是在DataSnapshot。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
void onDataChange(DataSnapshot snapshot) {
if (snapshot.hasChild("name")) {
// run some code
}
}
});
现在,这种设计模式感觉有点奇怪。您正在阅读整个数据库,以查看是否存在“名称”。您可以通过收听rootRef.child("name")
然后检查是否snapshot.exists()
来提高效率。
如果您正在尝试验证此处,而不是控制流量,则应考虑将此代码放入您的rules.json
。
编辑:我最初使用了错误的函数名(childExists而不是hasChild)
http://stackoverflow.com/a/36826793/3145960 –
的[如果火力地堡存在理解数据]可能的复制( http://stackoverflow.com/questions/36826429/understanding-if-data-exists-in-firebase) –