如何在android firebase聊天中显示输入指示器
我需要使用firebase在聊天应用程序中实现键入指示器。 我有这样的逻辑如何在android firebase聊天中显示输入指示器,android,firebase,firebase-realtime-database,android-edittext,Android,Firebase,Firebase Realtime Database,Android Edittext,我需要使用firebase在聊天应用程序中实现键入指示器。 我有这样的逻辑 添加一个textwatcher侦听器,并在名为typing in firebase db的字段中添加文本更改侦听器更新标志 然后我认为当一个值改变时,它会通知值改变监听器 如果任何人有代码实现,请分享 是的。你说得对。在用户节点中维护一个布尔标志,如isTyping 在textwatcherListener上,将该值更改为true,并且还会触发yeahonValueChangeListener,这样您就可以通过获取该
- 添加一个textwatcher侦听器,并在名为typing in firebase db的字段中添加文本更改侦听器更新标志
- 然后我认为当一个值改变时,它会通知值改变监听器 如果任何人有代码实现,请分享
是的。你说得对。在用户节点中维护一个布尔标志,如
isTyping
在
textwatcherListener
上,将该值更改为true,并且还会触发yeahonValueChangeListener
,这样您就可以通过获取该布尔值在收件人屏幕上设置键入
,请检查下面的代码:`
使结构类似:(它可能会根据你的需要而变化,我只是指你的东西)
我有一个对象“isTyping”,有两个键,比如说“first\u user”和“second\u user”。
如果要检查是否有“第二个用户”正在键入,这应该是代码
更新“isTyping”>“first_user”的值(假设您正在键入)
mBinder.etChatMessage.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i1,int i2){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
Map params=新的HashMap();
参数put(“第一个用户”,charSequence.length()>0);
mMessageThread.child(“isTyping”).updateChildren(参数);
}
@凌驾
public void PostTextChanged(可编辑){
}
});
你能告诉我们你用代码做了什么吗?@GastónSaillén我只做了聊天部分,我在这部分遇到了问题没有实现代码你的逻辑看起来很公平。它会起作用的,努力吧。发布你的firebase数据structure@JinsLukose在这里我发现了同样的问题:你们有任何代码实现吗?@JinsLukose没有。我只是在表达一种逻辑。这就是您可以实现的方式。好的,谢谢您的帮助response@JinsLukose我希望你的疑问现在被澄清事实上我正在寻找一个代码实现让我检查并让你知道是的,当然!我使用了几乎相同的功能,并实现了这一点,即idTyping参数应该放在messageThread父对象中。因此,在该线程中,您可以跟踪两个用户的输入状态。我认为您的db结构是合理的。感谢tommorow告诉您的每一件事
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) {
}
});
}
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) {
}
});