私はAndroidアプリケーションを構築しており、firebaseを使用してデータを格納しています。私のアプリには "Course"と "Quiz"というクラスがあります。ユーザーが新しいクイズを追加するたびに、コースオブジェクトの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の値が増分されていないことです。 クイズが追加された直後、最後のコード行でquizCountが更新された後(クイズカウント変数が最初は0に変更されてから1が増えてから常に1に更新された後)、トースト1とトースト3が表示されます。 ()は、データベース内のデータが変更されたときに呼び出されます。私はこれを必要としません。私はそれを増やすためにデータベースから価値を読みたいと思います。 私もAddListenerForSingleValueEvent()を試しましたが、Toast 1はまったく表示されませんでした。 quizCountの値を読み取ってデータベースを更新する方法を教えてください。 多くの感謝