0

我正在开发一个 Android 应用程序,该应用程序除其他功能外,还可以检测用户附近的位置。为此,我使用基于Anywall 应用程序示例的 Parse Query 。问题是这个查询的结果总是空的,即使我的数据库已经填充了。这是我的代码:

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 仪表板中设置什么吗?我数据库中的每个地方都有纬度和经度。起初他们是字符串;我将它们更改为 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。你能解释一下这个问题吗?任何帮助将不胜感激。

问候, 纳西斯

4

2 回答 2

0

据我所知,您应该将类​​名(作为字符串)传递给ParseQuery

public static ParseQuery<VevantoParse> getQuery() {
    return ParseQuery.getQuery("VevantoParse"); // where VevantoParse is your Parse's class name
}

这是文档

于 2015-04-24T12:02:02.457 回答
0

对于任何感兴趣的人,问题是我没有在我的服务器数据库中定义 Parse Geo Point。为此,当您向数据库中添加一行时(我是从我的 Java 代码中完成的),您只需定义一个使用键命名的 Parse Geo Point(在我的例子中为“位置”),然后添加条件 mapQuery。 whereWithinKilometers("位置", userLocation, MAX_SEARCH_DISTANCE); 使用那个特定的键。

祝你好运!

于 2015-05-19T10:40:04.207 回答