首页 > 解决方案 > 如何在 android firebase 聊天中显示打字指示器

问题描述

我需要使用 firebase 在聊天应用程序中实现打字指示器。我有一个逻辑

在此处输入图像描述

标签: androidfirebasefirebase-realtime-databaseandroid-edittext

解决方案


请检查以下代码:`

使结构类似于:(它可能会根据您的需要而有所不同,我只是向您推荐一些东西)

在此处输入图像描述

我有一个带有两个键的对象“isTyping”让我们说“first_user”“second_user”。 如果您想检查“second_user”是否正在输入,这应该是代码。

  private void checkForOtherUserTypingStatus() {
        mMessageThread.child("isTyping").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("true")) {
                    updateTypingViewVisibility(true);
                } else if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("false")) {
                    updateTypingViewVisibility(false);
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot.getValue() != null) {
                    if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("true")) {
                        updateTypingViewVisibility(true);
                    } else if (dataSnapshot.getKey().equalsIgnoreCase("second_user") && dataSnapshot.getValue().toString().equals("false")) {
                        updateTypingViewVisibility(false);
                    }
                }
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

更新“isTyping”>“first_user”的值(假设您正在输入)

 mBinder.etChatMessage.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


                Map<String, Object> params = new HashMap<>();
                params.put("first_user", charSequence.length() > 0);
                mMessageThread.child("isTyping").updateChildren(params);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

推荐阅读