我试图像下一张照片中那样检索数据
以及来自Firebase文档的内容
String text = et_pwd.getText().toString().trim();
if (text.equalsIgnoreCase("")) {
// empty/blank string
}else {
// not blank string
}
和"课程"被定义为ArrayList
mCoursesChild.child("Courses").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
Course temp = data.getValue(Course.class);
courses.add(temp));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这里是课程课程
ArrayList<Course> courses = new ArrayList<>();
显然出现了问题,那么data.getValue(Course.class)的值是多少呢? 或者我是以错误的形式编写数据库?
PS:我手动编写数据库对象
答案 0 :(得分:2)
我发现代码中的一些不匹配与JSON属性的命名有关。 Firebase遵循JavaBean属性命名约定,这意味着这个getter:
public List<Subject> getSubjects(){ return mSubjects; }
映射到名为subjects
的媒体资源。在您的JSON中,该属性名为Subjects
,不匹配。要解决此问题,请在JSON中拼写subjects
或注释getter:
@PropertyName("Subjects")
public List<Subject> getSubjects(){ return mSubjects; }
除此之外,正如Anas评论的那样:Firebase文档和专家建议通过将JSON的每个分支限制为单一类型来保持数据结构的平坦。
在您的情况下,这意味着我建议保留三个单独的顶级列表:
如果您在课程中使用相同的键,您仍然会将课程与课程相关联:
Courses
CourseId1
Name: "Algebra"
Lessons
CourseId1
LessonId1
Name: "Algebra week 1"
这样可以更容易: