我需要使用firebase在聊天应用程序中实现打字指示器。我有一个逻辑
请检查以下代码:`
使结构类似于:(根据您的需要可能会有所不同,我只是在向您推荐一些内容)
我有一个带有两个键的对象“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) {
}
});
是的你做对了。在用户节点中维护一个像isTyping
这样的布尔标志。
在textwatcherListener
上将值更改为true,是的onValueChangeListner
也将触发,以便您可以通过获取该布尔值在收件人屏幕上设置Typing