我在firebase中创建了一个表并保存了几个数据,并希望通过指定输入来查询特定数据,例如Sqlite中的where where:
Query queryRef = ref.orderByChild("name").equalTo(username);
queryRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChild) {
// i get the call back if i specify username which is already there in table
}
});
我的问题是当我传递表中不存在的任何值时,我没有得到任何回调。
如何在Firebase中处理此类方案。还有其他任何我应该听的回电吗?
答案 0 :(得分:1)
使用addListenerForSingleValueEvent替换您的addChildEventListener
侦听器以获得单个值,您可以像下面一样反复回调,
Query queryRef = ref.orderByChild("name").equalTo(username);
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//if match your data otherwise return null
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 1 :(得分:1)
您应该使用addValueEventListener()
。您可以在other similar question找到更多详细信息。
但是您的代码将如下所示,您将能够使用snapshot.exists()
查看是否存在匹配结果。
Query queryRef = ref.orderByChild("name").equalTo(username);
queryRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChanged(DataSnapshot snapshot) {
if (snapshot.exists()) {
//found results
}
else {
//not found
}
}
});