【发布时间】:2017-03-09 00:23:03
【问题描述】:
我正在构建一个 android 应用程序并使用 firebase 来存储数据。我的应用程序有“课程”和“测验”类。每当用户添加新测验时,我想增加课程对象中 quizCount 的值。 这就是它们在 Firebase 中的存储方式。
这是我正在写入数据库的代码部分。
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);
现在的问题是 quiz 已成功存储在数据库中,但 quizCount 的值没有增加。 Toast 2 和 Toast 3 在添加测验后立即出现,并且在最后一行代码在 Firebase 中更新 quizCount 之后(始终更新为 1,因为 quizCount 变量最初为 0,然后在递增后为 1)然后出现 Toast 1。这表示 ValueEventListener( ) 在数据库中更改数据时调用。我不想要这个。我想从数据库中读取值来增加它。 我也尝试过 AddListenerForSingleValueEvent() 但是 Toast 1 根本没有出现。 请告诉我如何读取 quizCount 的值,以便我增加它并在数据库中更新它。 非常感谢
【问题讨论】:
标签: android firebase firebase-realtime-database