Zgodnie z Android Documentation dla Parse domyślna kolejność sortowania powinna już być zależna od odległości (najbliższa najdalej), chyba że sam określasz inną kolejność sortowania.
Ponadto, warto zajrzeć do metod ParseQuery.whereWithin*
jak można określić tylko chcą lokalizacje w ciągu określonej liczby mil, kilometrów itd
Jeśli wszystko inne zawiedzie, a porządek po prostu nie chcesz pracować nad zwróconymi lokalizacjami, możesz je zawsze sortować, przechodząc przez zwroty z zapytania i używając ParseObject.getParseGeoPoint("rest_location")
.
To zwróci ParseGeoPoint
obiekt, a następnie można wykonać następujące czynności
ParseGeoPoint.distanceInKilometersTo(sLatlong);
Aby uzyskać dystans do lokalizacji użytkownika i posortować na ten temat.
Dla odniesienia Oto próbka 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)));
}
}
a następnie zakładając masz List<ParseObject> results;
po prostu zrobić:
Collections.sort(results, new UserLocationComparator(sLatlong));
Wiesz, że Parse jest wyłączany, prawda? W styczniu 2017 r. Ich usługa zostanie zamknięta. http://blog.parse.com/announcements/moving-on/ – Dom
Tak, wiem to. Będę używał tego przez 3 miesiące, aby zatwierdzić mój pomysł. – Anirudh
Na marginesie mojej odpowiedzi, gdy mówisz, że wyniki nie są posortowane na odległość, czy sprawdzasz kolejność wyników w metodzie 'FindCallback.done (...)'? W przeciwnym razie gdzie indziej sprawdzasz kolejność wyników? Być może sam zmieniasz kolejność po przetworzeniu wyników. –