我需要使用Firebase在聊天应用程序中实现打字指示器。 我有类似的逻辑
然后我认为当值更改时它将通知值更改侦听器
如果任何人有代码实现,请分享。
答案 0 :(得分:2)
请检查以下代码:`
使结构类似:(根据您的需要,它可能会有所不同,我只是在向您推荐某些东西)
我有一个带有两个键的对象“ 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) {
}
});
答案 1 :(得分:1)
是的。你答对了。在用户节点中,维护一个布尔值标志,例如isTyping
。
textwatcherListener
上将该值更改为true,并且onValueChangeListner
也会触发,因此您可以通过获取布尔值来在收件人屏幕上设置Typing