¿Cómo se encuentran los ParseRoles actualmente asociados con el ParseUser actual?

Quiero rellenar un ListView con un Array o un ArrayList de los diferentes ParseRole s que el ParseUser actual se ha asociado con ellos. Supongo que esto requiere algún tipo de consulta en el usuario actual, sin embargo, no estoy realmente seguro de cómo devolver las funciones, así como devolverlos a un Array o un ArrayList con el que podría poblar un ListView . Sé que puede obtener el usuario actual utilizando esto:

 ParseUser.getCurrentUser(); 

Sin embargo no puedo de allí parecer encontrar cómo usted establece las funciones que el usuario se ha asignado.

EDITAR:

También he intentado experimentar con esto:

 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(); } } }); 

Pero todavía no puedo conseguir nada para trabajar relacionado con eso tampoco. En la actualidad he intentado todo lo que puedo pensar y realmente no están llegando a ninguna parte como el tamaño de los "objetos" sigue siendo siempre 0.

¡Gracias por adelantado!

RESPONDER:

Después de implementar la lógica detrás de la respuesta de Marius Falkenberg Waldal y de portarla a Android, logré finalmente obtener una solución que funcionara para mi situación. He decidido publicarlo en caso de que ayude a alguien en el futuro:

  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); 

Es probable que necesite iterar a través de los roles, comprobando si el usuario actual está en cada uno de ellos. Lo siento, no puedo proporcionarte un código de android, ya que soy un programador de iOS, pero este es un ejemplo de cómo puedes hacerlo con iOS, y espero que puedas portarlo a android. En iOS haría un método, o tal vez una categoría, para este código:

 PFQuery *rolesQuery = [PFRole query]; NSArray *allRoles = [rolesQuery findObjects]; NSMutableArray *userRoles = [NSMutableArray arrayWithCapacity:10]; for (PFRole *role in allRoles) { PFQuery *usersQuery = [role relationforKey:@"users"].query; [usersQuery whereKey:@"objectId" equalTo:[PFUser currentUser].objectId]; if ([usersQuery countObjects]) { [userRoles addObject:role]; } } 

Espero que esto te pone en el camino correcto …

Me tropecé con esto mientras trataba de confirmar algo, y me di cuenta de que hay una manera mucho más simple:

Androide

 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 } }); 

Y por el bien de los demás, aquí está la respuesta en un par de otros idiomas.

IOS Objetivo-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 }); 

Usa esto

 ParseRole myroles= (ParseRole) new ParseQuery("Role").whereEqualTo("name", "AppName-"+currentuserid).getFirst(); Here "name" -----------Column in Role Table "AppName" --------eg: "MyApp-23" in your _User table I think this helps... 
  • Java.lang.NoClassDefFoundError en 4.1 y trabajando con 5.1.utilizando multidex en android studio
  • Android: Actualización de campos para ParseUsers
  • Debe registrar esta subclase ParseObject antes de instanciarla
  • ParseApacheHttpClient problema con Android Marshmallow: no se puede encontrar el método de referencia SSLSocketFactory.getHttpSocketFactory
  • Android parse.com que guarda error de la instalación. Objeto no encontrado para la actualización
  • Libs no funciona en android studio
  • Parse.com equivalente a las combinaciones de SQL
  • Parse Error: Parse # enableLocalDatastore (Context) `debe invocarse antes de` Parse # initialize (Context) `
  • ¿Anulando la notificación push en BroadcastReceiver (PushBots)?
  • Android parse push notificación y nuevo GCM generar token de dispositivo equivocado y analizar notificación push no funciona
  • GCM y el conflicto de notificación de Parse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.