Parse query.whereNear和query.whereWithinKilometers都返回空对象列表

时间:2016-03-11 16:15:15

标签: android parse-server

首先,我在localhost上使用Parse Server,而我的客户端是Parse Android SDK。

我有一个名为“位置”的GeoPoint字段“Place”。这个类有50行,所有这些行都有“location”,如: -22.xxxxxx | -42.xxxxxx

当我尝试查询所有行时,如果没有Geopoint过滤器,我会获得所有50个。但是当我添加过滤器query.whereWithinKilometersquery.whereNear时,我得到一个空{{1变种

objects

日志“LOG 1”和“LOG 2”显示我的正确坐标,因此 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()); } } }); Geopoint是正确的。

“LOG 3”未显示,因为“objects.toString()”抛出NullPointerException。

结论:

完全相同的代码,没有gp。 de callback只需不到1秒钟。

使用query.whereWithinKilometers,回调需要5到10秒,然后返回空对象。我已经尝试了15,150,1500,15000公里,没有任何回报。那个班级的所有地方都在我的城市,所以,10公里就可以了。

我想不出其他任何事情要检查。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。地缘点查询需要一个特定的&#34; 2dsphere&#34; MongoDB索引工作。

解决方案是在MongoDB脚本shell上执行以下代码:

    db.Place.ensureIndex({ location: "2dsphere" });

Where&#34; Place&#34;是班级/集合和&#34;位置&#34;是geopoint字段。