DondeNuestra consulta no parece funcionar correctamente en Parse
Estoy trabajando en una aplicación para Android relacionada con Geolocations. Estoy usando Parse como backend. Necesito mostrar resultados basados en la ubicación actual del usuario.
Estoy utilizando esta consulta:
- Cómo cambiar la contraseña usando la contraseña antigua en el análisis de android
- Cómo grabar push open desde la notificación de Parse Push
- Cómo enviar notificación push en dos segmentos en momentos diferentes en un día en analizar
- ParseApacheHttpClient problema con Android Marshmallow: no se puede encontrar el método de referencia SSLSocketFactory.getHttpSocketFactory
- Force Parse Push Notifications para usar PPNS en lugar de GCM
ParseQuery<ParseObject> query = ParseQuery.getQuery("Restaurants"); ParseGeoPoint sLatlong = new ParseGeoPoint(currentLat, currentLong); query.whereNear("rest_location", sLatlong);
Pero los resultados no son ordenados distancia sabio.
Alguien me puede ayudar.
- Cómo obtener la lista de usuarios en el análisis mediante la aplicación de Android
- Android Parse Push Notification No se muestra Icono en Marshmallow
- Subclase de JavaScript en Parse.com
- Abra la actividad haciendo clic en la notificación push de Parse
- Parse.com: con parseUser, ¿cómo puedo guardar datos en una columna que he creado en parse de la clase?
- Parse REST API no devuelve clave del cliente
- SaveAllInBackground no funciona dentro de deleteAllInBackground como se desee
- Usando ParseFacebookUtils.logInWithReadPermissionsInBackground no guarda los permisos de Facebook Android
De acuerdo con la documentación de Android para Parse, el orden de clasificación por defecto ya debería estar a distancia (más cercano a lo más lejano) a menos que esté especificando otro orden de clasificación usted mismo.
Además, es posible que desee consultar los métodos ParseQuery.whereWithin*
, ya que puede especificar que sólo desee ubicaciones dentro de un cierto número de millas, kilómetros, etc.
Si todo lo demás falla y el orden de clasificación simplemente no quiere trabajar en las ubicaciones devueltas siempre puede ordenarlas usted mismo haciendo un bucle a través del ParseObject
s devuelto de la consulta y usando ParseObject.getParseGeoPoint("rest_location")
.
Esto devolverá un objeto ParseGeoPoint
y luego podrá hacer lo siguiente
ParseGeoPoint.distanceInKilometersTo(sLatlong);
Para obtener la distancia a la ubicación del usuario y clasificar en eso.
Para referencia aquí es una muestra Comparator
:
public class UserLocationComparator implements Comparator<ParseObject> { private final ParseGeoPoint userLoc; public UserLocationComparator(ParseGeoPoint userLoc) { this.userLoc = userLoc; } @Override public int compare(ParseObject po1, ParseObject po2) { ParseGeoPoint loc1 = po1.getParseGeoPoint("rest_location"); ParseGeoPoint loc2 = po2.getParseGeoPoint("rest_location"); return loc1 == null ? (loc2 == null ? 0 : 1) : (loc2 == null ? -1 : Double.compare(userLoc.distanceInKilometersTo(loc1), userLoc.distanceInKilometersTo(loc2))); } }
Y luego suponiendo que tiene una List<ParseObject> results;
Simplemente hacer
Collections.sort(results, new UserLocationComparator(sLatlong));
Paso 1: En primer lugar, debe comprobar si su columna "rest_location" es del tipo "GeoPoint". Si es entonces usted debe obtener resultados ordenados por distancia automáticamente con el código escrito por usted. Sólo el problema puede ser que "rest_location" no es de tipo geopoint o bien hay algún problema con Parse. Según la documentación de análisis: https://www.parse.com/docs/android/guide#geopoints Da resultados predeterminados en el orden ordenado (más cercano al más alejado) de userLocation.
Si no funciona, entonces debe usar su propio comparador.
class DistanceComparator implements Comparator<ParseObject> { ParseGeoPoint userGeoPoint; public DistanceComparator(ParseGeoPoint geoPoint) { userGeoPoint = geoPoint; } @Override public int compare(ParseObject lhs, ParseObject rhs) { double dist1 = lhs.getParseGeoPoint("rest_location").distanceInKilometersTo(userGeoPoint); double dist2 = rhs.getParseGeoPoint("rest_location").distanceInKilometersTo(userGeoPoint); return Double.compare(dist1,dist2); } }
Ahora puede simplemente pasar Collections.sort (locationList, nuevo DistanceComparator (sLatLong));
- "Android.database.sqlite.SQLiteException: no hay tal tabla" error en casos raros
- ¿Cómo hacer que ProgressBar deje de girar?