2017-07-31 69 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裏面 –