2017-08-16 54 views
0

檢索嵌套的對象我想以檢索數據作爲下一張照片如何火力數據

enter image description here

這裏就是Ø從火力地堡文檔得到

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

ArrayList<Course> courses = new ArrayList<>(); 

這裏是Cours E級

public class Course { 

    private String mCourseName; 
    List<Subject> mSubjects; 

    public Course(){}  // Default constructor required for calls to DataSnapshot.getValue(Course.class) 

    public Course(String CourseName){ 
     mCourseName = CourseName; 
    } 

    public String getcourseName(){ 
     return mCourseName; 
    } 
    public List<Subject> getSubjects(){ return mSubjects; } 

} 

顯然出了點問題,那麼什麼是data.getValue(Course.class)返回的值? 還是我寫錯了數據庫?

PS:我寫的數據庫對象手動

+1

應避免在火力堂妹嵌套結構,創建複雜時增加數據檢查火力地堡文檔https://firebase.google.com/docs/database/android/structure-data –

回答

1

我看到一些不匹配在你的代碼VS的JSON屬性的命名。火力地堡後續JavaBean屬性命名約定,這意味着該消氣:

public List<Subject> getSubjects(){ return mSubjects; } 

映射到一個名爲subjects屬性。在您的JSON中,該屬性名稱爲Subjects,與此不匹配。要解決這個問題,無論是拼在你的JSON subjects或註釋,吸氣:

@PropertyName("Subjects") 
public List<Subject> getSubjects(){ return mSubjects; } 

除此之外,由於阿納斯說:在火力地堡文檔和專家建議保持你的數據結構扁平你JSON的每個分支限制單一類型。

在你的情況,這意味着我會建議保持三個獨立的頂級名單:

  1. 課程
  2. 教訓
  3. 問題

如果使用了相同的密鑰課程中,您仍將課程與課程相關聯:

Courses 
    CourseId1 
    Name: "Algebra" 
Lessons 
    CourseId1 
    LessonId1 
     Name: "Algebra week 1" 

這將使它更容易:

  • 只讀您需要的數據。
  • 確保用戶只能訪問他們授權的數據。
+0

謝謝,固定它對,我用你提到的新層次重新創建了數據庫,並且它工作得很好 –