我想在添加之前测试Firebase中是否存在数据。但我的方法有问题:我尝试使用此Javascript代码列出所有数据:
var theDataToAdd = userName;
var usersRef = new Firebase('https://SampleChat.firebaseIO-demo.com/users/');
usersRef.on('child_added', function(snapshot) {
var message = snapshot.val();
if (message.name == theDataToAdd)
alert ("exist");
});
但如果用户不存在,则会在之前添加,然后我的代码会说他存在。您会说这是正常的,因为我的警报仅在“child_added”时被调用,但我不知道该怎么做。
我也尝试使用“value”事件,但我的“message.name”为空。
我该如何解决?
答案 0 :(得分:49)
您可以使用DataSnapshot.hasChild
来确定某个孩子是否存在。
usersRef.once('value', function(snapshot) {
if (snapshot.hasChild(theDataToAdd)) {
alert('exists');
}
});
这是一个快速的方法,展示了它的工作原理:http://jsfiddle.net/PZ567/
但是这将下载usersRef
下的所有数据并对客户端执行检查。通过加载更具针对性的参考,只为您要检查的用户下载数据效率更高:
usersRef.child(theDataToAdd).once('value', function(snapshot) {
if (snapshot.exists()) {
alert('exists');
}
});
答案 1 :(得分:18)
我使用以下代码:
var theDataToAdd = userName;
var ref = new Firebase('https://SampleChat.firebaseIO-demo.com/users/' + theDataToAdd);
ref.on('value', function(snapshot) {
if (snapshot.exists())
alert ("exist");
else
alert ("not exist");
});
我的方法比这更轻量级:
usersRef.once('value', function(snapshot) {
if (snapshot.hasChild(theDataToAdd)) {
alert('exists');
}
});
因为客户端无法获取所有用户数据,这可能是巨大的。
答案 2 :(得分:11)
检查Firebase Db中是否存在ANDROID数据的方法。
final Firebase firebaseRef = new Firebase(<Your_Firebase_URL>/Users).child(username);
firebaseRef.addListenerForSingleValueEvent(new ValueEventListener) {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// User Exists
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});