在Parse中查找特定用户失败求助:始终返回0条结果
解决Parse User类查询返回空结果的问题
嘿,刚看了你的问题,第一次用Parse遇到这种情况确实容易摸不着头脑,咱们一步步来排查和解决:
1. 用Parse专门的用户查询类,而非通用对象查询
Parse的User是特殊的内置类,虽然理论上可以用ParseQuery.getQuery("User"),但官方推荐使用ParseUser.getQuery()来查询用户数据,这样能避免一些内置类的适配问题。修改后的代码应该是这样:
// 使用ParseUser的专属查询 ParseQuery<ParseUser> userQuery = ParseUser.getQuery(); userQuery.whereEqualTo("username", username); userQuery.setLimit(1); userQuery.findInBackground(new FindCallback<ParseUser>() { @Override public void done(List<ParseUser> users, ParseException e) { if (e == null) { if (!users.isEmpty()) { // 成功找到用户,获取位置信息 ParseUser targetUser = users.get(0); ParseGeoPoint userLocation = targetUser.getParseGeoPoint("你的GeoPoint列名"); Toast.makeText(MapsActivity.this, "找到1位用户", Toast.LENGTH_SHORT).show(); // 这里可以添加处理位置的逻辑 } else { Toast.makeText(MapsActivity.this, "未匹配到对应用户", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(MapsActivity.this, "查询出错:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } } });
2. 检查User类的权限设置(最可能的原因)
Parse默认对User类做了严格的权限限制:只有用户本人才能读取自己的数据,其他用户无法默认访问他人的用户数据。这就是你查不到其他用户的核心原因!
你需要在Parse Dashboard里调整权限:
- 登录你的Parse项目后台,进入
Core模块,选择User类 - 切换到
Security标签页 - 找到
Public Read Access选项,勾选允许(这样所有用户都能读取其他用户的公开信息) - 注意
Public Write Access保持关闭,避免任意用户修改他人数据,保证安全性
3. 确认用户名的匹配问题
Parse的查询是大小写敏感的!比如数据库里的用户名是DanishAjaib,但你查询的是danishajaib,就会返回空结果。如果想让查询更友好,可以改成大小写不敏感的匹配:
// 针对Parse Server的大小写不敏感查询 userQuery.whereMatches("username", username, "i");
4. 排查服务器端的额外限制
如果你用的是自托管的Parse Server,还要检查:
- 服务器配置里
allowClientClassCreation没有禁用User类 - 有没有自定义的云代码限制了
User类的查询权限
按照上面的步骤来,尤其是权限设置,应该就能解决你查不到用户的问题啦!
内容的提问来源于stack exchange,提问作者Danish Ajaib
相关产品推荐
相关产品推荐

