获取玩家无人接听的quizz列表

时间:2015-12-09 20:12:20

标签: parse-platform

我正在研究一个小型的quizz应用程序来学习Parse。

在数据方面,我有一个表格测验,一个表格播放器和一个表格QuizAnswered。 QuizAnswered表包含玩家参与的测验列表。所以这是一个多对多的关系。

我想获得玩家没有参加的测验列表。

我已经能够得到它,但我需要做两个api调用,我想知道是否有更好的方法来做到这一点。以下是我正在使用的代码我坦率地说,我并不为此感到自豪。

public void getUnansweredQuizListForPlayer(Player p) {
    ParseQuery<ParseObject> quizAnsweredQuery = ParseQuery.getQuery("QuizAnswered");
    quizAnsweredQuery.whereEqualTo("player", p);
    quizAnsweredQuery.findInBackground(new FindCallback<ParseObject>() {
        public void done(final List<ParseObject> quizAnsweredList, ParseException e) {
            if (e == null) {
                ParseQuery<Quiz> quizQuery = ParseQuery.getQuery("Quiz");
                quizQuery.findInBackground(new FindCallback<Quiz>() {
                    public void done(List<Quiz> quizList, ParseException e) {
                        if (e == null) {
                            ArrayList<Quiz> quizzes = new ArrayList<Quiz>();
                            for (Quiz quiz : quizList) {
                                boolean answered  = false;
                                for (ParseObject o :quizAnsweredList) {
                                   Quiz quizAnswered = (Quiz) o.getParseObject("quiz");
                                    if (quizAnswered.getObjectId().equals(quiz.getObjectId())) {
                                        answered = true;
                                    }
                                }
                                if (!answered) {
                                    quizzes.add(quiz);
                                }
                            }
                        } else {
                            Log.d("score", "Error: " + e.getMessage());
                        }
                    }
                });
            } else {
                Log.d("score", "Error: " + e.getMessage());
            }
        }
    });
}

有没有办法只在一个查询中获取玩家未参加测验的列表?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以将objectId Quiz Player存储在answeredQuizList的{​​{1}}列中,该列将包含用户提供的objectId个quizes的数组回答。

然后使用:(伪代码)

进行Quiz查询
query whereKey:"objectId" notContainedIn: user.answeredQuizList