¿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... 
  • ¿Anulando la notificación push en BroadcastReceiver (PushBots)?
  • Parse.com no almacena más de un objeto no guardado
  • Problema de inicio de sesión de Android Facebook SDK con parse sdk
  • Eliminar una fila de la tabla Parse
  • ¿Cómo obtengo las Notificaciones Push de Parse.com trabajando en una aplicación para Android de Cordova / Phonegap?
  • Cómo cambiar la contraseña usando la contraseña antigua en el análisis de android
  • Analizar notificación de inserción abierta en diferentes actividades Android
  • Android: ¿Cuál es la forma más suave de sincronizar una base de datos remota en segundo plano?
  • Android Parse Presione el registro de dispositivo de notificación sólo una vez en un dispositivo
  • Parse.com deshabilitar la notificación de notificación push
  • Parse para Android no puede pin Lista de subclase a caché
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.