我一直试图像这样设置一个值更改侦听器:
final DatabaseReference chat_ref =
FirebaseDatabase.getInstance().getReference(Constants.ARG_CHAT_ROOMS +
"/" + room_type_1);
chat_ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
showAlert(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
问题在于,showAlert
方法后的括号会一直循环,当我只想要一个时,会创建几个警报。
导致此循环的原因是什么?如何解决? 非常感谢您的帮助!
我不确定我在哪里弄错了,因为即使这样也会循环:
chat_ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showAlert(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
如果使用addValueEventListener添加ValueEventListener,则每次引用更改值时都会触发,因此showAlert可以多次显示。
使用addListenerForSingleValueEvent:您的侦听器只会被调用一次。
https://firebase.google.com/docs/database/android/read-and-write#read_data_once
答案 1 :(得分:0)
由于ValueEventListener
的工作方式,您有几个提醒。但请记住ValueEventListener
不是loop
是interface
。请参阅更多详情here。正如您在官方文档中看到的那样,每次特定位置的数据发生变化时都会触发它。
要解决此问题,只需从showAlert()
方法调用onDataChange
即可。
希望它有所帮助。