我正在与Parse.com合作并创建了一个个人资料页面,用户可以在其中输入各种信息,例如年龄,姓名,并设置允许的最低年龄和通过搜索栏允许的最大年龄。这些信息被记录下来,当填充用户列表时,在支持下我创建了一个匹配系统,返回当前用户年龄范围内的用户列表。
以下是我的代码:
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereGreaterThanOrEqualTo("Minimum_Age", minimumAge);
query.whereLessThanOrEqualTo("Maximum_Age", maximumAge);
这似乎已经部分奏效了。同样地,当两个用户的最小年龄和最大年龄值相等时,如果用户自从落入该年龄范围以外,则该当前用户的最小年龄是22,而另一个用户是列表是20比它不会显示。当最大值和最小值都相等时,此代码似乎才有效。我的问题是我正确设置它,因为看起来即使该列表中的用户属于该年龄范围内的值相同,它们也不会显示。
如果您需要进一步的信息,请告知我们。 澄清: 例如, 假设列表中有2个用户,当前用户登录为用户A. 如果用户最低年龄为25岁,最大年龄为50岁 如果用户B的最小年龄为25岁,最大年龄为50岁 用户B将显示为潜在匹配
我遇到的问题如下 如果用户最低年龄为22岁,最大年龄为50岁 如果用户B的最小年龄为22岁,最大年龄为48岁 用户B不应该显示,因为它属于该范围
如果用户A最小年龄为20岁,最大年龄为50岁 如果用户B minmum年龄为22岁,最大年龄为50岁 无论用户B年龄是25岁还是30岁,都不会显示用户B.
答案 0 :(得分:2)
如果我正确理解你,你想要返回用户,如果他们匹配一个或另一个。如果是这种情况,您可以使用.or方法。以下是从Parse Docs中使用它的示例:
ParseQuery<ParseObject> lotsOfWins = ParseQuery.getQuery("Player");
lotsOfWins.whereGreaterThan(150);
ParseQuery<ParseObject> fewWins = ParseQuery.getQuery("Player");
fewWins.whereLessThan(5);
List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>();
queries.add(lotsOfWins);
queries.add(fewWins);
ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries);
mainQuery.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// results has the list of players that win a lot or haven't won much.
}
});
答案 1 :(得分:1)
问题是您要将所有用户的最小年龄与当前用户的最小年龄和所有用户的最大年龄与当前用户的最大年龄进行比较。相反,您希望将所有用户的年龄与以下各项进行比较:
query.whereGreaterThanOrEqualTo("Age", minimumAge);
query.whereLessThanOrEqualTo("Age", maximumAge);