如何在android firebase聊天中显示输入指示符

Jin*_*ose 8 android android-edittext firebase firebase-realtime-database

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

  • 添加textwatcher侦听器,并在firebase db中名为键入的字段的文本更改侦听器更新标志中
  • 然后我认为当值更改时,它将通知值更改侦听器

    如果任何人有代码实现请分享.

在此输入图像描述

Dee*_*tel 5

请检查以下代码:`

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

在此处输入图片说明

我有一个带有两个键的对象“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) {

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

更新“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) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的数据库结构是有道理的。感谢我明天会通知的每一件事 (2认同)