2016-08-13 67 views
0

我在火力地堡,businessscience两个节点,都在一个叫做courses的Android - 检索来自不同节点的数据在火力地堡

{ 
    "courses" : { 
    "business" : { 
     "-KP-EadFq_rsXymxbUas" : { 
     "courseCHours" : "4", 
     "courseCode" : "BIZ2000", 
     "courseName" : "Business Mathematics", 
     "courseYear" : "1", 
     "prerequisite" : { 
      "-KP-EcGRXCtlXYQvjoYo" : { 
      "preMainCourse" : "Business Mathematics", 
      "preSubCourse" : "null" 
      } 
     }, 
     "sections" : { 
      "-KP-EbIkS1jxVfNIE5jH" : { 
      "sectionCode" : "A1", 
      "sectionSeats" : "20" 
      }, 
      "-KP-EbklnKpsUIIz_U68" : { 
      "sectionCode" : "A2", 
      "sectionSeats" : "20" 
      } 
     } 
     } 
    }, 
    "science" : { 
     "-KP-EKJeu5PdfyJZnIVk" : { 
     "courseCHours" : "4", 
     "courseCode" : "SCI3000", 
     "courseName" : "Science Fundamentals", 
     "courseYear" : "1", 
     "prerequisite" : { 
      "-KP-EOVlKZx4zofkg5RT" : { 
      "preMainCourse" : "Science Fundamentals", 
      "preSubCourse" : "null" 
      } 
     }, 
     "sections" : { 
      "-KP-EM8vYB9d0-axX8Cr" : { 
      "sectionCode" : "A1", 
      "sectionSeats" : "20" 
      }, 
      "-KP-EModVxv_Vc3SBZ_G" : { 
      "sectionCode" : "A2", 
      "sectionSeats" : "20" 
      } 
     } 
     }, 
     "-KP-EVvdvHgqxGPsxCrE" : { 
     "courseCHours" : "4", 
     "courseCode" : "SCI3100", 
     "courseName" : "Science History", 
     "courseYear" : "1", 
     "prerequisite" : { 
      "-KP-EXa8naK5uF7y9py2" : { 
      "preMainCourse" : "Science History", 
      "preSubCourse" : "null" 
      } 
     }, 
     "sections" : { 
      "-KP-EWX0hh8q5d5YTkVR" : { 
      "sectionCode" : "A1", 
      "sectionSeats" : "20" 
      }, 
      "-KP-EWu8pWXS1aR9zh_4" : { 
      "sectionCode" : "A2", 
      "sectionSeats" : "20" 
      } 
     } 
     } 
    } 
    } 
} 

CourseDetails模型

public class CourseDetails { 

    private String courseCode; 
    private String courseName; 
    private String courseCHours; 
    private String courseYear; 
    private String courseKey; 

    public CourseDetails() { 
    } 

    public CourseDetails(String courseCode, String courseName, String courseCHours, String courseYear) { 
     this.courseCode = courseCode; 
     this.courseName = courseName; 
     this.courseCHours = courseCHours; 
     this.courseYear = courseYear; 
    } 

    @Exclude 
    public String getCourseKey() { 
     return courseKey; 
    } 

    public void setCourseKey(String courseKey) { 
     this.courseKey = courseKey; 
    } 

    public String getCourseCode() { 
     return courseCode; 
    } 

    public void setCourseCode(String courseCode) { 
     this.courseCode = courseCode; 
    } 

    public String getCourseName() { 
     return courseName; 
    } 

    public void setCourseName(String courseName) { 
     this.courseName = courseName; 
    } 

    public String getCourseCHours() { 
     return courseCHours; 
    } 

    public void setCourseCHours(String courseCHours) { 
     this.courseCHours = courseCHours; 
    } 

    public String getCourseYear() { 
     return courseYear; 
    } 

    public void setCourseYear(String courseYear) { 
     this.courseYear = courseYear; 
    } 
} 

代码我相同的父试图从两个节点获取数据

ArrayList<String> businessList; 
ArrayList<String> scienceList; 

DatabaseReference businessRef = FirebaseDatabase.getInstance().getReference().child("courses").child("business"); 

businessRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     displayBusiness(dataSnapshot); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

DatabaseReference scienceRef = FirebaseDatabase.getInstance().getReference().child("courses").child("science"); 

scienceRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     displayScience(dataSnapshot); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

public void displayBusiness(DataSnapshot dataSnapshot) { 

    for (DataSnapshot ds : dataSnapshot.getChildren()) { 
     CourseDetails c = ds.getValue(CourseDetails.class); 
     String code = c.getCourseCode(); 
     String name = c.getCourseName(); 
     String CodeName = code + " " + name; 

     businessList.add(CodeName); 
    } 
} 

public void displayScience(DataSnapshot dataSnapshot) { 

    for (DataSnapshot ds : dataSnapshot.getChildren()) { 
     CourseDetails c = ds.getValue(CourseDetails.class); 
     String code = c.getCourseCode(); 
     String name = c.getCourseName(); 
     String CodeName = code + " " + name; 

     scienceList.add(CodeName); 
    } 
} 

使用上面的代码似乎返回空数据ArrayLists

我的目标是检索数据并存储在不同的ArrayList,businessListscienceList。这两个ArrayLists将用于比较数据。

我的问题是检索的数据不会持续在ArrayLists。如何确保检索到的数据存储在ArrayLists中,以便以后可以比较数据?

回答

1

您没有将侦听器附加到正确的引用。

将其更改为这些

businessRef.addListenerForSingleValueEvent(new ValueEventListener() { 
scienceRef.addListenerForSingleValueEvent(new ValueEventListener() { 

编辑

迭代里面,你不从入口调用的getValue。 改变这种

for (DataSnapshot ds : dataSnapshot.getChildren()) { 
    CourseDetails c = ds.getValue(CourseDetails.class); 

你要确保比较方法只调用当两个听众都要求onDataChange,您可以use my solution in another similar questionuse a utility class from an answer from a firebaser here

+0

再次威利克。真的很抱歉,我忘了更新那部分。这两个'Listeners'实际上都被正确地引用了。我更新了我的代码 –

+0

啊好吧,你可以发布你的数据库结构和'CourseDetails'类吗? @LorekBryanson – Wilik

+0

好的。用结构编辑我的问题 –