2017-07-31 51 views
0

在firebase中,onDataChange每次执行if条件内的代码时调用两次。 这是我的代码。onDataChange addListenerForSingleValueEvent发射两次

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
     if(snapshot.child("visité").getValue().toString().equals(visité.getText().toString()) 
      && snapshot.child("date").getValue().toString().equals(date.getText().toString()) 
      && snapshot.child("zone").getValue().toString().equals(zone.getText().toString()) 
      && snapshot.child("etat").getValue().toString().equals("Créé")){ 
       mDB.child(visiteur).child(snapshot.getKey()).removeValue(); 
       loadData(); 
     } else { 
      Toast.makeText(context,getString(R.string.suppr_error), Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

在阅读了类似的问题后,我认为它是由onDataChange内部的循环引起的。我如何获得onDataChange的循环?

回答

1

每次数据更改(添加,删除,更新,移动...)时调用onDataChange,您正在使用removeValue(),因此它会调用该方法,因此它会被调用两次。

+0

有没有什么办法我可以得到它没有被调用一次? –

+0

使用'addListenerForSingleValueEvent'会调用'onDataChange'一次 –

+0

addDataChange已经在addListenerForSingleValueEvent里面 –