Во-первых, я использую Parse Server на локальном хосте, а мой клиент — Parse Android SDK.
У меня есть класс «Место» с полем GeoPoint, называемым «местоположение». Этот класс имеет 50 строк, все они с «местоположением», например: -22.xxxxxx | -42.xxxxxx
Когда я пытаюсь запросить все строки без фильтра Geopoint
, я получаю все 50. Но когда я добавляю фильтр query.whereWithinKilometers
или query.whereNear
, я получаю пустую переменную objects
.
ParseQuery<ParseObject> query = ParseQuery.getQuery("Place");
Log.d("LOG 1", String.valueOf(gp.getLatitude()));
Log.d("LOG 2", String.valueOf(gp.getLongitude()));
query.whereWithinKilometers("location", gp, 150);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects, ParseException e) {
Log.d("LOG 3", objects.toString());
if (e == null) {
if (objects.size() > 0) {
for (int i = 0; i < objects.size(); i++) {
//do something here...
}
}
} else {
Log.d("Query error", e.getMessage());
}
}
});
Журналы «LOG 1» и «LOG 2» показывают мои правильные координаты, поэтому gp
Geopoint правильный.
«LOG 3» не отображается, потому что «objects.toString()» создает исключение NullPointerException.
Вывод:
Точно такой же код без query.whereWithinKilometers
работает отлично. И обратный вызов занимает менее 1 секунды.
С query.whereWithinKilometers
обратный вызов занимает от 5 до 10 секунд, а затем возвращает пустой объект. Я пробовал 15, 150, 1500, 15000 километров и ничего не возвращается. И все места этого класса находятся в моем городе, так что 10 километров будет достаточно.
Не могу придумать, что еще проверить.