android - 如何在 android firebase 聊天中显示打字指示器

标签 android firebase firebase-realtime-database android-edittext

<分区>

我需要使用 firebase 在聊天应用程序中实现输入指示器。 我有这样的逻辑

  • 添加一个 textwatcher 监听器并在文本更改监听器中更新名为 typing in firebase db 的字段的标志
  • 然后我想当值改变时它会通知值改变监听器

    如果有人有代码实现请分享。

enter image description here

最佳答案

请检查下面的代码:`

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

enter image description here

I have an object "isTyping" with Two Keys Let's say "first_user" and "second_user". If you want to check for "second_user" is typing or not this should be the code.

  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) {

            }
        });
    }

To update value of "isTyping" > "first_user" (assume that you are typing)

 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) {

            }
        });

关于android - 如何在 android firebase 聊天中显示打字指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702778/

相关文章:

python - (401) 未经 python-firebase 授权

Android 8 或更高版本的应用程序在使用 Firebase Performance SDK 的 Android Oreo 上崩溃

android - 在 Firebase 中制作 POJO 时,可以使用 ServerValue.TIMESTAMP 吗?

javascript - 如何在函数中将数据发送到firebase数据库

android - 尝试将 Android 中的 Intent 设置为选项卡

java - 使用 RxJAVA 和 DAO 更新数据库插入的 UI

android - 等待 Camera.PictureCallback

firebase - 如何在 Flutter 中获取嵌套 firebase 数据的所有子数据?

ios - 如何使用 Swift 保持数据源与 firebase 实时数据库同步?

android - 如何在android中获取 “YYYY-MM-DD”格式的日期对象