几周前我刚开始学习Firebase for Android,现在我正在创建一个非常基本的聊天应用程序。
当我按下主页按钮然后返回应用程序时出现问题。我认为它再次调用OnChildAdded()
事件,因此产生双打。我不知道如何解决这个问题。如果有人能帮助我,我将不胜感激。
这是我遇到麻烦的部分:
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//messageText.append(username + ": " + messageReceived + " \n");
Iterator iterator = dataSnapshot.getChildren().iterator();
String newmsg = null, theusername = null;
while (iterator.hasNext()){
newmsg = (String) ((DataSnapshot) iterator.next()).getValue();
theusername = (String) ((DataSnapshot) iterator.next()).getValue();
}
messageText.append(theusername + ": " + newmsg + " \n");
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
},200);
}
这是模拟器的图片和我的firebase控制台的结构:
答案 0 :(得分:0)
如果同一个孩子多次调用onChildAdded()
,则非常可能是您连接了多个侦听器。当您的活动变为非活动状态时,您需要detach the listener。
// if you attach like this
var listener = ref.addChildEventListener(childEventListener);
// later detach the listener with
ref.removeEventListener(listener);
分离听众的最佳位置取决于您附加的位置。通常最好考虑对:onCreate()
- > onDestroy()
,onStart()
- > onStop()
,onResume()
- > {{1} }。