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:

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.

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

  • Spinner Error "El recuento del tipo de vista del adaptador de Spinner debe ser de 1"
  • Cómo subir un archivo de audio a Parse.com - Android
  • Analizar las notificaciones en android no funcionará
  • Problema Eliminación de una clase / columna de Parse
  • Android parse push notificación y nuevo GCM generar token de dispositivo equivocado y analizar notificación push no funciona
  • Android: la adición de vistas a las imágenes no se actualiza - onClick
  • NoClassDefFoundError en ParseUtils
  • Parse push notificación token del dispositivo android no guardado en algunos casos
  • Recuperar ID de Facebook de authdata en Parse - Android
  • Parse.com obteniendo todos los nombres de usuario
  • Vaciar RecyclerView utilizando datos obtenidos de parse.com
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.