android - 如何在 android firebase 聊天中显示打字指示器
问题描述
我需要使用 firebase 在聊天应用程序中实现打字指示器。我有一个逻辑
- 添加一个 textwatcher 侦听器并在文本更改侦听器中更新名为在 firebase db 中键入的字段的标志
然后我认为当值更改时它会通知值更改侦听器
如果有人有代码实现,请分享。
解决方案
请检查以下代码:`
使结构类似于:(它可能会根据您的需要而有所不同,我只是向您推荐一些东西)
我有一个带有两个键的对象“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) {
}
});
推荐阅读
- react-native - 如何访问我的 react-native expo 应用程序的位置权限设置?
- java - StringEscapeUtils.escapeHtml/escapeHtml4 commons-lang 和 commons-lang3 不一致
- javascript - 使用 Javascript 动态更改表和行的背景颜色
- java - 为什么这个抛出异常的方法在调用时不必在 try catch 块中?
- linux - 在 Docker 中为 Linux 主机预留 CPU 和内存
- javascript - 使用异步调用设计函数回调
- oracle - 电子邮件消息中的 sql 语句 utl_mail.send
- firebase - Firebase 实时数据库写入规则
- regex - 具有任何大小写变化的字符串的正则表达式
- date - 维度表中日期类型属性的哪种数据类型,包括开始和结束日期?