【发布时间】:2019-05-20 04:15:24
【问题描述】:
我使用这个函数来检查特定日期是否存在于数据库中,但我每次都得到错误并且新日期也在数据库中更新
private boolean dateCheck() {
dateKey = false;
final ProgressDialog pg = new ProgressDialog(AdminMain.this);
pg.setMessage("Validating Date");
pg.setCanceledOnTouchOutside(false);
pg.setCancelable(false);
pg.show();
final DatabaseReference dbDate = FirebaseDatabase.getInstance().getReference("Dates").child(batch).child(sem);
dbDate.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(date)) {
pg.dismiss();
Snackbar.make(findViewById(android.R.id.content), "Attendance has been already sumbitted", Snackbar.LENGTH_LONG).show();
dateKey = false;
} else {
dateKey = true;
dbDate.child(date).setValue(true);
pg.dismiss();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Snackbar.make(findViewById(android.R.id.content), databaseError.getMessage(), Snackbar.LENGTH_SHORT).show();
pg.dismiss();
dateKey=false;
}
});
return dateKey;
}
【问题讨论】:
-
因为你将字段设置为false,不要等待它被设置为其他任何东西。
-
所以,因为我一开始就指定了 false ,所以值总是 false ?
-
这是异步的:那些是事件处理程序;他们在
dateCheck完成后运行。我认为您目前对事件处理程序何时运行有点困惑。
标签: java android firebase android-studio firebase-realtime-database