如何在全局变量的回调中存储数据?

时间:2016-04-18 21:40:24

标签: java android firebase crud

我正在尝试编写一种方法来获取我的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;
    }

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以创建一个以ArrayList<StudentModel>为参数的私有方法,然后您可以将学生全局变量设置为通过参数传递的数据。我希望这应该工作,并将是干净的解决方案。

您需要在ArrayList<StudentModel>中拥有另一个本地addValueEventListener类型变量。我希望很清楚。

如果您需要示例,请告诉我