[英]How to listen for changes in android studio using firebase
I am having a hard time reading changes on my firebase. 我很难阅读我的Firebase上的更改。 What I am trying to do is for every change when the start button is triggered a dialog will show saying, "This has already been executed." 我想做的是,每当触发启动按钮时进行一次更改,就会出现一个对话框,显示“此操作已被执行”。
I tried using addListenerForSingleValueEvent but it seems that the dialog only showed when all of the children have changed. 我尝试使用addListenerForSingleValueEvent,但似乎对话框仅在所有子项均已更改时显示。
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
currentWeek = programTrackers.get(0).getWeek();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("ProgramTracker")
.child(GlobalUser.getmUser().getiD())
.child(programTrackers.get(0).getProgramId());
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final int childCount = (int) dataSnapshot.getChildrenCount();
int count = 0;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
ProgramTracker programTracker = snapshot.getValue(ProgramTracker.class);
if (programTracker.getProgramExerciseWeek() == currentWeek) {
programTrackChecker.add(programTracker);
}
count++;
}
if (count == childCount) {
boolean isFinished = false;
//last iteration
for (int i = 0; i < programTrackChecker.size(); i++) {
if (programTrackChecker.get(i).isProgramExerciseFinished()) {
isFinished = true;
} else
isFinished = false;
}
if (isFinished) {
AlertDialog.Builder builder = new AlertDialog.Builder(DayExerciseActivity.this);
builder.setMessage("You have already completed all exercises. Are you sure you want to do it again?");
builder.setPositiveButton("Yes", (dialogInterface, i) -> {
startActivity(new Intent(DayExerciseActivity.this, DoProgramActivity.class)
.putExtra("programTrackers", programTrackers)
.putExtra("exerciseNum", String.valueOf(0)));
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.show();
} else
startActivity(new Intent(DayExerciseActivity.this, DoProgramActivity.class)
.putExtra("programTrackers", programTrackers)
.putExtra("exerciseNum", String.valueOf(0)));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
You need to change this: 您需要更改此:
databaseReference.addListenerForSingleValueEvent(new ValueEventListener
Into this: 变成这个:
databaseReference.addValueEventListener(new ValueEventListener
From the docs: 从文档:
public abstract void onDataChange (DataSnapshot snapshot)
This method will be called with a snapshot of the data at this location. 将使用此位置的数据快照调用此方法。 It will also be called each time that data changes 每次数据更改时也会调用它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.