Разбор гео-запроса всегда пуст
Я работаю над приложением для Android, которое, помимо прочего, обнаруживает места в непосредственной близости от пользователя. Для этого я использую Parse Query на основе примера из приложения Anywall. Проблема в том, что результат этого запроса всегда пуст, хотя моя база данных заполнена. Вот мой код:
private static final int MAX_SEARCH_DISTANCE = 150;
private static final int MAX_SEARCH_LIMIT = 10;
ParseGeoPoint userLocation = new ParseGeoPoint(Double.valueOf("23.0465320"), Double.valueOf("72.5925700"));
ParseQuery<VevantoParse> mapQuery = VevantoParse.getQuery();
mapQuery.whereWithinKilometers("location", userLocation, MAX_SEARCH_DISTANCE);
И класс, который расширяет ParseObject:
@ParseClassName("Posts")
public class VevantoParse extends ParseObject {
public static ParseQuery<VevantoParse> getQuery() {
return ParseQuery.getQuery(VevantoParse.class);
}
}
Я не понимаю одну вещь: ключ "местоположение". Откуда Parse знает, как связать этот ключ с моим классом в облаке? Во всех примерах, которые я прочитал, "местоположение" используется в качестве ключа, но я не понимаю логику. Есть ли что-то, что я должен установить на панели инструментов Parse? Каждое место в моей базе данных имеет широту и долготу. Сначала они были String; Я изменил их на Double, но это все равно не сработало.
Я также попытался использовать запрос, который не зависит от моего класса VevantoParse:
ParseQuery<ParseObject> getPlacesQuery = ParseQuery.getQuery("my_class_name");
ParseGeoPoint userLocation = new ParseGeoPoint(Double.valueOf("23.0465320"), Double.valueOf("72.5925700"));
getPlacesQuery.whereWithinKilometers("location", userLocation, MAX_SEARCH_DISTANCE);
Но бесполезно. Обратите внимание, что запрос работает, когда я размещаю условия, не связанные с местоположением, например whereEqualTo. Не могли бы вы пролить свет на проблему, пожалуйста? Любая помощь будет принята с благодарностью.
С уважением, Нарцис
2 ответа
Насколько мне известно, вы должны передать имя класса (как String) ParseQuery
:
public static ParseQuery<VevantoParse> getQuery() {
return ParseQuery.getQuery("VevantoParse"); // where VevantoParse is your Parse's class name
}
Вот документация.
Для всех, кто интересуется, проблема в том, что я не определил географическую точку Parse в моей базе данных сервера. Для этого, когда вы добавляете строку в базу данных (я сделал это из своего Java-кода), вы просто определяете географическую точку Parse, названную с использованием ключа (в моем случае - "location"), а затем добавляете условие mapQuery.whereWithinKilmeters("location", userLocation, MAX_SEARCH_DISTANCE); используя этот определенный ключ.
Удачи!