如何实现消息发送状态,如whatsapp勾号?

时间:2018-08-12 17:49:29

标签: android firebase firebase-realtime-database

我正在使用聊天应用程序。 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){

                            }
                        }
                    });
                }
            }
        });

1 个答案:

答案 0 :(得分:3)

通过使用更新中的回调方法,您可以确定何时成功写入数据库。您在这里使用的是一个,但是您在其中什么也没做:

mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
        if (databaseError!=null){

        }
    }
});

调用上面的onComplete时,您才能知道在服务器上成功完成messageUserMap的写操作。