Android中如何在Parse平台获取其他用户的用户名?
解决Parse Android端仅能获取当前用户用户名的问题
问题现象
在Android端使用Parse平台查询_User类时,无论是否添加排除当前用户的条件,都只能获取到当前登录用户的用户名,_User类中实际存在其他用户,但Logcat无报错信息。
可能原因及解决方法
1. 现有用户的ACL权限未配置公开读权限
你代码中设置的默认ACL仅对新创建的用户生效,已存在的用户的ACL不会自动更新。需要为这些用户手动配置公开读权限:
- 登录Parse Dashboard,进入_User类,选中所有需要被查询到的用户,批量修改它们的ACL,开启
Public Read Access权限。 - 或者通过代码批量更新(仅建议在测试环境使用):
ParseQuery<ParseUser> query = ParseUser.getQuery(); query.findInBackground(new FindCallback<ParseUser>() { @Override public void done(List<ParseUser> users, ParseException e) { if (e == null) { for (ParseUser user : users) { ParseACL acl = new ParseACL(); acl.setPublicReadAccess(true); user.setACL(acl); user.saveInBackground(); } } else { e.printStackTrace(); } } });
2. Parse服务器配置限制了用户列表查询
部分Parse服务器版本默认限制客户端查询_User类的全部用户,需要修改服务器配置:
- 在Parse服务器的配置文件(如
config.json)中,添加或修改allowClientClassQueries配置,允许客户端查询_User类:
{ "allowClientClassQueries": ["_User"] }
修改后重启Parse服务器。
3. 代码优化
- 移除冗余代码:你代码中的
ParseUser user= new ParseUser();未被使用,可直接删除。 - 确保全局ACL初始化:建议在Application类的
onCreate方法中初始化默认ACL,而非Activity中,确保全局生效:
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Parse.initialize(new Parse.Configuration.Builder(this) .applicationId("YOUR_APP_ID") .clientKey("YOUR_CLIENT_KEY") .server("YOUR_PARSE_SERVER_URL") .build()); // 设置默认ACL ParseACL defaultACL = new ParseACL(); defaultACL.setPublicReadAccess(true); ParseACL.setDefaultACL(defaultACL, true); } }
记得在AndroidManifest.xml中注册这个Application类。
4. 验证当前用户状态
确保查询时当前用户已正常登录,可在查询前添加判断:
if (ParseUser.getCurrentUser() == null) { // 处理未登录情况,比如跳转登录页 return; }
内容的提问来源于stack exchange,提问作者Bouchra bicho
相关产品推荐
相关产品推荐

