如何在 parse android 中获取多个对象

how to fetch more than one object in parse android

  public void getSchoolClasses(ArrayList<SchoolClass>schoolClassesIds , final CompletionHandler completionHandler){
    ParseQuery<ParseObject> query = ParseQuery.getQuery("schoolClasses");
    query.whereContainedIn("objectId",schoolClassesIds);
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if (e==null){

                for (int i =0 ; i < objects.size();i++){
                    SchoolClass schoolClass=(SchoolClass)objects.get(i);
                    schoolClass.getTeacher().fetchInBackground(new GetCallback<ParseObject>() {
                        @Override
                        public void done(ParseObject object, ParseException e) {

                        }
                    });
                }

            }else{
                completionHandler.onError(e);
            }
        }
    });
}

我如何知道何时完成所有对象的提取并触发完成处理程序?

从你的代码中我可以了解到你有一所学校 class 并且每所学校可以有 1...许多老师。 对于该结构,您应该使用 pointers。 指针允许您保存 2 个解析对象之间的一对多关系,最大的优点是您可以执行 one api 调用来获取您需要的所有数据,这样您就可以不需要在循环中调用 fetch,这是一种不好的做法。

要使用指针,您需要执行以下操作:

  1. 转到您的学校子 class 并为教师添加 setter 和 getter。教师的类型为 List<{Teacher Sub Class object}>
  2. 您的查询现在应该如下所示:

ParseQuery<ParseObject> query = ParseQuery.getQuery("schoolClasses");
query.whereContainedIn("objectId",schoolClassesIds);
query.include("teachers"); // this line will fetch also the teachers together with the school

  1. 在您的查询回调中,您现在可以通过以下方式访问教师:

学校Class学校Class=(学校Class)objects.get(i); schoolClass.getTeachers();

  1. Pointers 还允许您通过在 include 函数中使用点符号来检索关系的关系(例如 "teachers.students" 将为每个人带来所有教师和所有学生老师)。这就是我告诉你使用指针的原因。

您可以在 here

中阅读更多相关信息

我还建议您也阅读 Sub Classing 您的解析对象。通过查看您的代码,您似乎并没有真正使用它。解析对象的子 classing 使您可以使代码更有条理,还可以轻松访问解析对象。

请阅读有关 Subclass 的更多信息以及如何在 here 中使用它 这不是强制性的,只是一个建议:)