我正在尝试编写一种方法来获取我的firebase数据库中所有当前保存的学生。但我无法将这些数据存储在全局变量students
中。怎么做?我无法用OOP的理论弄清楚如何解决这个范围问题。请问有什么好主意吗?
private static ArrayList<StudentModel> students = new ArrayList<StudentModel>();
private Firebase mStudentsRef;
public ArrayList<StudentModel> getAll() {
mStudentsRef = new Firebase("https://firstapp.firebaseIO.com/students");
mStudentsRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
StudentModel student;
HashMap<String, String> studentDetails;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
studentDetails = new HashMap<String, String>();
student = new StudentModel();
for (DataSnapshot sds : ds.getChildren())
studentDetails.put(sds.getKey(), sds.getValue().toString());
student.set_id(ds.getKey());
student.setFirstname(studentDetails.get(dbHandler.STUDENT_FIRSTNAME));
student.setLastname(studentDetails.get(dbHandler.STUDENT_LASTNAME));
student.setUsername(studentDetails.get(dbHandler.STUDENT_USERNAME));
student.setPassword(studentDetails.get(dbHandler.STUDENT_PASSWORD));
students.add(student);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("Student.getAll(): ", firebaseError.getMessage());
}
});
return students;
}
提前致谢!
答案 0 :(得分:0)
您可以创建一个以ArrayList<StudentModel>
为参数的私有方法,然后您可以将学生全局变量设置为通过参数传递的数据。我希望这应该工作,并将是干净的解决方案。
您需要在ArrayList<StudentModel>
中拥有另一个本地addValueEventListener
类型变量。我希望很清楚。
如果您需要示例,请告诉我