我正在开发一款Android应用,除其他功能外,还可以检测用户附近的位置。为此,我使用基于Anywall app中的示例的Parse查询。问题是即使填充了我的数据库,此查询的结果也始终为空。这是我的代码:
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如何知道如何将该密钥与我在云中的类相关联?在我读过的所有例子中,“location”被用作键,但我不理解逻辑。我必须在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);
但是没用。请注意,当我放置与location无关的条件时,查询有效,例如whereEqualTo。你能解释一下这个问题吗?任何帮助将不胜感激。
此致 纳西斯
答案 0 :(得分:0)
据我所知,您应该将类名(作为String)传递给ParseQuery
:
public static ParseQuery<VevantoParse> getQuery() {
return ParseQuery.getQuery("VevantoParse"); // where VevantoParse is your Parse's class name
}
这是https://github.com/katzer/cordova-plugin-local-notifications/wiki/11.-Samples。
答案 1 :(得分:0)
对于任何感兴趣的人,问题是我没有在我的服务器数据库中定义Parse Geo Point。要做到这一点,当你向数据库中添加一行时(我是从我的Java代码中添加的),你只需定义一个使用键命名的Parse Geo Point(在我的例子中为“location”),然后添加条件 mapQuery.whereWithinKilometers(“location”,userLocation,MAX_SEARCH_DISTANCE); 使用那个特定的钥匙。
祝你好运!