首先,我在 localhost 上使用 Parse Server,我的客户端是 Parse Android SDK。
我有一个名为“位置”的 GeoPoint 字段的“地点”类。此类有 50 行,所有行都带有“位置”,例如:-22.xxxxxx | -42.xxxxxx
当我尝试在没有Geopoint
过滤器的情况下查询所有行时,我得到了全部 50 个。但是当我添加过滤器时query.whereWithinKilometers
,query.whereNear
我得到一个空objects
var。
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
完美的作品。并且 de 回调需要不到 1 秒的时间。
使用query.whereWithinKilometers
,回调需要 5 到 10 秒,然后返回空对象。我已经尝试了 15、150、1500、15000 公里,但没有任何回报。而且那个班级的所有地方都在我的城市,所以,10公里就可以了。
我想不出还有什么要检查的。