在检索对象时,Parse查询是一个接一个地运行还是同时运行?

时间:2016-01-18 02:12:28

标签: java android parse-platform

我的活动中有两个查询,并且想知道它们是一个接一个地执行还是同时执行,因为第二个查询返回一个空列表。在我的第一个查询中,我使用objectId检索ParseObject,然后将其设置为类变量。在我的第二个查询中,我使用我设置的ParseObject来查找" Answers"中的所有对象。 class(" Question"是指向Question"类中对象的指针)。但是,似乎第二个查询已经启动,因此它返回一个空的对象列表,因为第一个查询中的ParseObject尚未设置。如何让查询一个接一个地运行,以便首先设置变量?或者还有另一种解决这个问题的方法吗?

  ParseObject question;
  ParseQuery<ParseObject> query = ParseQuery.getQuery("Question");
        query.getInBackground(questionId, new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject object, ParseException e) {
            if(e==null){
                question = object;            
            } else {
                System.out.println(e);
            }

        }
    });


ParseQuery<ParseObject> answerQuery = ParseQuery.getQuery("Answers");
    answerQuery.whereEqualTo("Question", question);
    answerQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> answers, ParseException e) {
            if(e==null){


            } else {
                System.out.println(e);
            }

        }
    });

1 个答案:

答案 0 :(得分:1)

是的,这是在后台线程中完成的。您需要使answerQuery查找取决于question查找的完成情况。您可以创建另一种方法来执行答案查找,如下所示。

ParseQuery<ParseObject> query = ParseQuery.getQuery("Question");
query.getInBackground(questionId, new GetCallback<ParseObject>() {
    @Override
    public void done(ParseObject object, ParseException e) {
        if(e==null){
            queryAnswers(object);
        } else {
            System.out.println(e);
        }

    }
});

private void queryAnswers(ParseObject question) {
    ParseQuery<ParseObject> answerQuery = ParseQuery.getQuery("Answers");
    answerQuery.whereEqualTo("Question", question);
    answerQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> answers, ParseException e) {
            if(e==null){
                // do what you want with the answers...
            } else {
                System.out.println(e);
            }

        }
    });
}