我是firebase
和android
的新手。我正在尝试使用firebase为Android开发一个聊天应用程序
用于获取我在firebase查询下面使用的聊天。它正在检索所有消息,如果chatId
存在则工作正常。
mChatQuery = mFirebaseChatRef.child(chatId).orderByChild("chatId").equalTo(chatId);
mChatQuery.addChildEventListener(ChatActivity.this);
我遇到的问题是如果chatId
不存在,查询不会返回任何值
我的问题是如何识别值为null
,而不使用其他查询来检查chatId
isExist?
答案 0 :(得分:2)
试试这个:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child(chatId).orderByChild("chatId").equalTo(chatId);
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
//check if chatid is in the db
for(DataSnapshot data : dataSnapshot.getChildren()){
// retrieve also
}
}
else{
//does not exists, do something here
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
您可以使用上述查询来检索值并检查数据库中是否存在(一个查询)。但if(dataSnasphot.exists())
仅适用于valueventlistener而不适用于childeventlistener
答案 1 :(得分:2)
ChildEvent侦听器无法侦听不存在的节点,ValueEvent侦听器可以。
您可以做的是,将相同的查询附加到ValueEventListener。
现在看到这里的诀窍,一个firebase节点永远不会存在零孩子。
在值事件侦听器的onDataChange()方法中,您可以检查上面显示的子计数,并检查节点是否存在。
mChatQuery = mFirebaseChatRef.child(chatId).orderByChild("chatId").equalTo(chatId);
mChatQuery.addValueEventListener((new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.getChildrenCount()==0){
//This indicates that the chatId doesn't exist
}else{
//Do what you want with the snapshot
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});