Parse.com Android:复合查询

时间:2015-01-12 13:34:19

标签: android parse-platform

我想从Android应用程序中的Parse.com数据库中获取数据。

在我的表格中,我有以下栏目:

  

file_Type String,Message_File File,Text_Messages String,RecipientID String,SenderID String,Created_At,Updated_At

现在,我想查找userIDA123RecipientID SenderID的数据。

我试过了:

    ParseQuery<ParseObject> messageQueryRecv = new ParseQuery<ParseObject>("Messages");
    messageQueryRecv.whereEqualTo(kosherinfotech.NGCApp.workers.Constants.RECIPIENT_IDS, currentUser.getObjectId());

    ParseQuery<ParseObject> messageQuerySend = new ParseQuery<ParseObject>("Messages");
    messageQuerySend.whereEqualTo(Constants.SENDER_ID,currentUser.getObjectId());

    List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>();
    queries.add(messageQueryRecv);
    queries.add(messageQuerySend);

    ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries);
    mainQuery.addDescendingOrder("createdAt");

3 个答案:

答案 0 :(得分:0)

如果上面的内容是您的完整代码,那么您永远不会实际查询Parse数据库。您需要在代码底部使用类似的内容来异步地检索结果。

mainQuery.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> results, ParseException e) {
        // Results will contain the list of matches. 
        if(e == null ){
            // Matches found
        } else {
            // An error occured 
        }         
    }
});

答案 1 :(得分:0)

构建完构建查询对象之后,通过调用findInbackground调用query并在回调函数中处理结果

ParseQuery<ParseObject> messageQueryRecv = new ParseQuery<ParseObject>("Messages");
messageQueryRecv.whereEqualTo(kosherinfotech.NGCApp.workers.Constants.RECIPIENT_IDS, currentUser.getObjectId());
messageQueryRecv.addDescendingOrder("createdAt");
messageQueryRecv.findInBackground(new FindCallback<ParseObject>() {

 void done(List<ParseObject> results, ParseException e) {
  //do something with the result
  }
 });


ParseQuery<ParseObject> messageQuerySend = new ParseQuery<ParseObject>("Messages");
messageQuerySend.whereEqualTo(Constants.SENDER_ID,currentUser.getObjectId());
messageQuerySend.addDescendingOrder("createdAt");
messageQuerySend.findInBackground(new FindCallback<ParseObject>() {

 void done(List<ParseObject> results, ParseException e) {
  //do something with the result
  }
 });

答案 2 :(得分:0)

您可能必须在主查询中使用.include(常量....)。如果您将ParseObjects嵌套在其他ParseObjects中,则不会自动获取它们。您可以使用.include让SDK知道也可以获取它们或者您可以在从主查询中获取对象后手动获取它们。

取自Parse.com

在某些情况下,您希望在一个查询中返回多种类型的相关对象。您可以使用include方法执行此操作。例如,假设您正在检索最近十条评论,并且您想要同时检索其相关帖子:

ParseQuery<ParseObject> query = ParseQuery.getQuery("Comment");

// Retrieve the most recent ones
query.orderByDescending("createdAt");

// Only retrieve the last ten
query.setLimit(10);

// Include the post data with each comment
query.include("post");

query.findInBackground(new FindCallback<ParseObject>() {
  public void done(List<ParseObject> commentList, ParseException e) {
    // commentList now contains the last ten comments, and the "post"
    // field has been populated. For example:
    for (ParseObject comment : commentList) {
      // This does not require a network access.
      ParseObject post = comment.getParseObject("post");
      Log.d("post", "retrieved a related post");
    }
  }
});