¿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 deshacer una llamada ParseUser.setPassword ()?
- ¿Es Parse.com un servicio adecuado para la copia de seguridad / sincronización con SQLite en Android?
- Android - No se puede iniciar el receptor com.parse.ParsePushBroadcastReceiver
- Android parse.com No se puede recibir notificaciones push
- A condición de que la dependencia de grado sea AAR no JAR
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);
- Pushes no recibidos después de que la aplicación esté cerrada
- Ingresar usando Google+ en Parse
- Descargar imagen a través de la función Parse Cloud Code
- ¿Cómo analizar enviar push sin registro de gcm?
- Analizar con inicio de sesión de Facebook - Posiblemente desde APK v42 o Graph API v2.4
- Android Parse SDK i / o fallo formato desconocido (número mágico 227b)
- Android: ¿Cuál es la forma más suave de sincronizar una base de datos remota en segundo plano?
- Recuperar ID de Facebook de authdata en Parse - Android
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...