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);
}
}
});
}
如何知道何时完成所有对象的获取并触发完成处理程序?
答案 0 :(得分:0)
从你的代码我可以理解你有一个学校班级,每个学校可以有1 ...许多老师。 对于该结构,您应该使用指针。 指针允许您保存2个解析对象之间的一对多关系,最大的好处是您可以执行一个 api调用以获取所需的所有数据,因此您无需调用在循环中获取这是一种不好的做法。
要使用指针,您需要执行以下操作:
ParseQuery<ParseObject> query = ParseQuery.getQuery("schoolClasses");
query.whereContainedIn("objectId",schoolClassesIds);
query.include("teachers"); // this line will fetch also the teachers together with the school
SchoolClass schoolClass =(SchoolClass)objects.get(i); schoolClass.getTeachers();