java - 您如何找到当前与当前 ParseUser 关联的 ParseRoles?

标签 java android android-listview parse-platform querying

我想用 Array 或不同 ParseRoleArrayList 填充 ListView当前 ParseUser 已与他们相关联。我认为这需要对当前用户进行某种查询,但是我不太确定如何返回角色以及如何将它们返回到 ArrayArrayList 我可以用它来填充 ListView。我知道你可以使用这个获取当前用户:

ParseUser.getCurrentUser();

但是我似乎无法从那里找到您如何建立已分配给用户的角色。

编辑:

我现在也尝试过这个:

ParseQuery<ParseRole> query = ParseRole.getQuery();
query.whereEqualTo("users", ParseUser.getCurrentUser().getObjectId());
query.findInBackground(new FindCallback<ParseRole>() {
   @Override
   public void done(List<ParseRole> objects, ParseException e) {
      if(e == null) {
         Toast.makeText(getApplicationContext(), objects.size() + "", Toast.LENGTH_SHORT).show();
      } else {
         Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
      }
   }                      
});

但我似乎仍然无法获得与此相关的任何工作。我目前已经尝试了所有我能想到的方法,但并没有真正取得任何进展,因为“对象”的大小仍然始终为 0。

提前致谢!

回答:

在实现了 Marius Falkenberg Waldal 的答案背后的逻辑并将其移植到 Android 之后,我终于找到了适合我的情况的解决方案。我决定发布它,以防将来对任何人有帮助:

    ParseQuery<ParseRole> roleQuery = ParseRole.getQuery();
    List<ParseRole> allRoles = null;
    try {
        allRoles = roleQuery.find();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    userRoles = new ArrayList<ParseRole>();
    userRolesNames = new ArrayList<String>();
    for(ParseRole role : allRoles) {
        ParseQuery usersQuery = role.getRelation("users").getQuery();
        usersQuery.whereEqualTo("objectId", ParseUser.getCurrentUser().getObjectId());
        try {
            if(usersQuery.count() > 0) {
                userRoles.add(role);
                userRolesNames.add(role.getName().toString());
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }               

    GroupAdapter adapter = new GroupAdapter(this, userRolesNames);
    workspaces.setAdapter(adapter);

最佳答案

我在尝试确认某事时偶然发现了这一点,并意识到有一种更简单的方法:

安卓

ParseQuery<ParseRole> query = ParseRole.getQuery();
query.whereEqualTo('users', ParseUser.getCurrentUser());
query.findInBackground(new FindCallback<ParseRole>() {
    public void done(List<ParseRole> roles, ParseException e) {
        // do your thing with the roles list
    }
});

为了其他人,这里提供了其他几种语言的答案。

iOS 目标-C

PFQuery *query = [PFRole query];
[query whereKey:@"users" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *roles, NSError *error) {
  if (!error) {
    // Do something with the found roles
  }
}];

iOS swift

var query = PFRole.query();
query.whereKey('users', equalTo:PFUser.currentUser());
query.findObjectsInBackgroundWithBlock {
  (roles: [PFObject]!, error:NSError!) -> Void in
  if error == nil {
    // do your thing with the roles
  }
}

JavaScript

var query = new Parse.Query(Parse.Role);
query.equalTo('users', Parse.User.current());
query.find().then(function(roles) {
  // do your thing with the roles array
});

关于java - 您如何找到当前与当前 ParseUser 关联的 ParseRoles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542473/

相关文章:

Android 谷歌地图 ListView 与 onClickListener()

android - Chromecast 自定义接收器样式

java - 使用 Java ( android ) 中其他 Activity 的方法

android - 在 Android Eclipse 项目中使用 PayPal sdk

drag-and-drop - 在 SQLite 数据库中使用拖放排序 ListView

java - 如何将单击的 ListView 项目的文本发送到我的新 Activity ?

Java testng单数据提供者多测试

java - 关于Spring MVC中请求映射的一些疑惑

java - Maven 不会从父项目或子项目运行测试

java - Web 服务和 hibernate - 您如何将这两者结合起来?