我正在研究一个小型的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());
}
}
});
}
有没有办法只在一个查询中获取玩家未参加测验的列表?
提前感谢您的帮助。
答案 0 :(得分:1)
您可以将objectId
Quiz
Player
存储在answeredQuizList
的{{1}}列中,该列将包含用户提供的objectId
个quizes的数组回答。
然后使用:(伪代码)
进行Quiz
查询
query whereKey:"objectId" notContainedIn: user.answeredQuizList