2015-12-13 35 views
0

您好我試圖查詢解析中的一對多關係。我有一個活動表和邀請表。一個事件有許多邀請,許多邀請是由一個事件創建的。事件表有一個名爲status的列。狀態的值爲1,這意味着所有者擁有。在邀請表中,我有一個也稱爲狀態的列,如果要進入某個事件,其他用戶將把狀態更新爲1.我成功創建了該表。現在我試圖嘗試查詢EventInvitation表,其中狀態爲1。但是我很難完成這項任務。下面是我的代碼:在解析中查詢一對多關係

ParseQuery<ParseObject> query = ParseQuery.getQuery("Event"); 
     // Restrict to cases where the author is the current user. 
     //pass in a ParseUser and not String of that user 

     query.whereEqualTo("author", ParseUser.getCurrentUser()); 
     query.whereEqualTo("Status", "1"); 
     query.include("EventTitle"); 

     ParseQuery<ParseObject> parseQuery = ParseQuery.getQuery("Invitation"); 
     parseQuery.whereMatchesQuery("EventId", query); 


     // query.orderByAscending("createAt"); 

     // Run the query 
     parseQuery.findInBackground(new FindCallback<ParseObject>() { 
      @Override 
      public void done(List<ParseObject> objectList, ParseException e) { 
       if (e == null) { 
        // If there are results, update the list of event and notify the adapter 
        Log.d(TAG, "Im in background"); 
        // eventList.clear(); 
        invitationList.clear(); 
        for (ParseObject event : objectList) { 
         invitationList.add((Invitation)event); 
        } 
        Log.d(TAG, String.valueOf(invitationList.size())); 

        updateEventsList(); 

       } else { 
        Log.d(TAG, "Event retrieval error: " + e.getMessage()); 
       } 
      } 
     }); 
    } 

,當我嘗試在ListView顯示:

TextView tvTitle = (TextView)convertView.findViewById(R.id.textView_eventTitle); 

錯誤:我得到一個空指針指示獲取可能需要。請我在做什麼錯

+0

在您的代碼中有2個查詢,但只有一個'parseQuery'被提取。 –

+0

@RobertRowntree我試圖匹配查詢來檢索不會工作的對象 –

+0

@RobertRowntree將事件表中的EventId與Invitation表相匹配? –

回答

0

我相信你可以有兩種選擇:

ParseQuery<ParseObject> query = ParseQuery.getQuery("Event"); 
query.whereEqualTo("author", ParseUser.getCurrentUser()); 
query.whereEqualTo("Status", "1"); 


ParseQuery<ParseObject> parseQuery = ParseQuery.getQuery("Invitation"); 
parseQuery.whereEqualTo("EventId", id) 

List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>(); 
queries.add(query); 
queries.add(parseQuery); 

ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries); 
mainQuery.findInBackground(new FindCallback<ParseObject>() { 
    public void done(List<ParseObject> results, ParseException e) { 
    // results has the list of of invitations/events. 
    } 
}); 

您也可以嘗試和事件ID保存到邀請表,這樣你就不必查詢兩個表。但是,這將會複製一些數據,你可能會也可能不會。