我正在使用聊天应用程序。 Firebase具有此脱机功能。即使我处于离线状态,发送的短信也显示为已发送。
是否有可能显示两种状态?一种是用户从应用程序发送了消息,另一种是将消息写入数据库。任何帮助将不胜感激。
这是我写入数据库的方式:
mChatSendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = mChatMessageView.getText().toString();
if (!TextUtils.isEmpty(message)){
String user_ref = "Announcement/"+email_red+"/"+class_id;
DatabaseReference user_message_push = mRootRef.child("Announcement")
.child(email_red).child(class_id).push();
String push_id = user_message_push.getKey();
Map messageMap = new HashMap();
messageMap.put("Message", message);
messageMap.put("Type", 1);
Map messageUserMap = new HashMap();
messageUserMap.put(user_ref+"/"+push_id,messageMap)
mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError!=null){
}
}
});
}
}
});
答案 0 :(得分:3)
通过使用更新中的回调方法,您可以确定何时成功写入数据库。您在这里使用的是一个,但是您在其中什么也没做:
mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
if (databaseError!=null){
}
}
});
调用上面的onComplete
时,您才能知道在服务器上成功完成messageUserMap
的写操作。