Я создаю приложение для Android и использую firebase для хранения данных. В моем приложении есть классы «Курс» и «Викторина». Я хочу увеличить значение quizCount в объекте курса всякий раз, когда пользователь добавляет новую викторину. Вот как они хранятся в firebase. ValueEventListener() не считывает данные перед обновлением данных.
Это часть кода, где я пишу в базу данных.
toIncrementQuizCount = FirebaseDatabase.getInstance().getReference().child(Constants.FIREBASE_COURSES).child(userId).child(courseKey);
toIncrementQuizCount.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Course course = dataSnapshot.getValue(Course.class);
if(course != null) {
// int quizCount is intially set to 0
quizCount = course.getQuizCount();
// Toast 1
Toast.makeText(getActivity(), "inside listener " + Integer.toString(quizCount), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Quiz quiz = new Quiz(quizTitle, scheduledDate,marksPerQs, 0);
mDatabase.child(Constants.FIREBASE_QUIZZES).child(courseKey).push().setValue(quiz);
// Toast 2
Toast.makeText(getActivity(), Integer.toString(quizCount), Toast.LENGTH_SHORT).show();
quizCount = quizCount + 1;
// Toast 3
Toast.makeText(getActivity(),"after increment " + Integer.toString(quizCount), Toast.LENGTH_SHORT).show();
mDatabase.child(Constants.FIREBASE_COURSES).child(userId).child(courseKey).child(Constants.FIREBASE_COURSES_QUIZCOUNT).setValue(quizCount);
Теперь проблема заключается в том, что тест успешно хранится в базе данных, но значение quizCount не увеличивается. Тост 2 и Тост 3 появляются сразу после добавления викторины и после того, как quizCount обновляется в Firebase по последней строке кода (всегда обновляется до 1, так как переменная quizCount изначально равна 0, а затем 1 после приращения) появляется тост 1. Это означает, что ValueEventListener() вызывается при изменении данных в базе данных. Я не хочу этого. Я хочу прочитать значение из базы данных, чтобы увеличить его. Я также пробовал AddListenerForSingleValueEvent(), но затем Toast 1 вообще не отображался. Пожалуйста, скажите мне, как читать значение quizCount, чтобы я увеличил его и обновил его в базе данных. Большое спасибо