¿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.
- Cómo recibir notificaciones de push parse en un dispositivo android usando parse.com
- No se puede codificar un archivo de análisis no guardado, trabajando con ParseUser
- Generar y guardar una lista de ParseObjects dentro de un Parse.Cloud.httpRequest en una función de la nube
- Java.lang.NoClassDefFoundError en 4.1 y trabajando con 5.1.utilizando multidex en android studio
- Productos de Android Gradle con notificaciones de Parse Push
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);
- No se puede resolver com.parse.ParseQueryAdapter
- Android ParseQueryAdapter notifyDataSetChanged no funciona
- Cómo encontrar los lugares más cercanos basados en lat actual y largo usando Parse API (parse.com) en android
- Libs no funciona en android studio
- Parse.com equivalente a las combinaciones de SQL
- Parse: ¿Cómo configurar un puntero en Android?
- Cómo subir un archivo de audio a Parse.com - Android
- Parse CorodvaPush Ionic: Android no muestra notificaciones cuando la aplicación en el fondo
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...