2016-11-22 52 views
0
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); 
      } 
     } 
    }); 
} 

如何知道何時完成了所有對象的獲取並激發完成處理程序?如何在解析中獲取多個對象android

回答

0

從你的代碼我可以理解你有一個學校班,每個學校可以有1 ...很多老師。 對於該結構,您應該使用指針。 指針可以讓你一個保存到2個解析對象和很大的優勢之間有許多關係,你可以執行一個 API調用來獲取你需要的一切,所以你不會需要調用在循環中獲取的數據,是一種不好的做法。

爲了使用你需要做以下指導:

  1. 轉到您的學校子類,並添加setter和getter教師。教師將類型列表< {教師子類對象}>的
  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

  • 在您的查詢回調中,您現在可以通過以下方式訪問教師:
  • SchoolClass schoolClass =( SchoolClass)objects.get(ⅰ); schoolClass.getTeachers();

  • 指針,您還可以通過使用點符號內包括函數來檢索關係的關係(如「teachers.students」將帶來每全校所有的學生老師)。這就是我告訴你使用指針的原因。
  • 您可以閱讀here

    更多一點我也建議你也閱讀子類化的解析的對象。通過查看你的代碼,看起來你並沒有真正使用它。對分析對象進行子分類可以使您的代碼更加有組織,並且可以輕鬆訪問分析對象。

    請閱讀更多關於子類以及如何在here 使用它不是強制性的只是一個建議:)