我已经编写了用于验证目的的代码。我已经通过变量创建了变量,这些变量从数据中获取内容,但它们工作得很好,但是当我将存储的数据与用户想要存储的数据进行比较时,然后检查存储的数据,直到我强制关闭应用程序为止。下面是代码
private void checkThedatafirest() {
AppointmentREf.child("Appointments").child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
StartBusinse= mDisplayDate.getText().toString();
sAppoint = sTimeApp.getText().toString();
eAppoint = eTimeApp.getText().toString();
for (DataSnapshot snapshot: dataSnapshot.getChildren()){
String StartTime = snapshot.child("startFirstAppoint").getValue().toString();
String EndTime = snapshot.child("endSecondAppointment").getValue().toString();
String Date = snapshot.child("startBusinse").getValue().toString();
if (!StartBusinse.equals(Date)&& !sAppoint.equals(StartTime)&&!eAppoint.equals(EndTime)){
sendDataTofireStore();
break;
}else {
Toast.makeText(AppointmentInfo.this, "The data already exist , please change ",Toast.LENGTH_SHORT).show();
}
break;
}
}else {
sendDataTofireStore();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
答案 0 :(得分:1)
很难从您共享的代码中确定,但是通常这种行为是由于更新您侦听的数据引起的。在这种情况下,流程如下:
onDataChange
onDataChange
解决方案是要么不写所读取的数据,要么确保仅侦听一次数据。正确的解决方案取决于用例,但是方案2最简单的情况肯定是使用addListenerForSingleValueEvent
:
AppointmentREf.child("Appointments").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
...