Firebase循环,如何阻止循环播放

时间:2017-07-25 18:11:57

标签: android loops firebase firebase-realtime-database

我一直试图像这样设置一个值更改侦听器:

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) {

    }
});

2 个答案:

答案 0 :(得分:0)

如果使用addValueEventListener添加ValueEventListener,则每次引用更改值时都会触发,因此showAlert可以多次显示。

使用addListenerForSingleValueEvent:您的侦听器只会被调用一次。

https://firebase.google.com/docs/database/android/read-and-write#read_data_once

答案 1 :(得分:0)

由于ValueEventListener的工作方式,您有几个提醒。但请记住ValueEventListener不是loopinterface。请参阅更多详情here。正如您在官方文档中看到的那样,每次特定位置的数据发生变化时都会触发它。

要解决此问题,只需从showAlert()方法调用onDataChange即可。

希望它有所帮助。