Parse.com查询附近的物品并按时间排序而不是距离

时间:2014-12-25 10:18:14

标签: android parse-platform geolocation

我们正在使用Parse.com创建一个基于位置的Android聊天应用程序,我已经通过“Chats”Parse Class保存了我的聊天记录。我们希望在我们的应用程序中显示给定位置周围的聊天,并且它们必须是“createdTime”的降序(最新的第一个)。对于查询我使用以下代码。

    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Chat");
    query.addDescendingOrder("createdAt");
    query.whereWithinKilometers("location", location, distance);
    query.setLimit(10);
    query.findInBackground(new FindCallback<ParseObject>() {

        @Override
        public void done(List<ParseObject> items, ParseException e) {
            if(e==null){
                // Display Results
            }
        }

检索列表不是理想的,Parse会考虑排序距离并弄乱列表。使用“wherewithinkilometers”时,有没有办法禁用距离排序?

例如,我有

chat | location | time
text8| 15,74    | 11.30
text7| 15,74    | 11.25
text6| 15,74    | 11.20
text5| 15,74    | 11.15
text4| 15,74    | 11.10
text3| 15,74    | 11.05
text2| 15,74    | 11.02
text1| 15,74    | 11.00
.......................

检索列表是

chat | location | time
text4| 15,74    | 11.10
text3| 15,74    | 11.05
text1| 15,74    | 11.00
......................

如果我检索所有带有“createdAt”标签的聊天,然后只使用距离远的那些聊天,那么它对我有效。但这不是实现分页的最佳解决方案。

1 个答案:

答案 0 :(得分:0)

您需要删除query.addDescendingOrder("createdAt");并手动对查询结果进行排序。

来自Parse Android docs

  

请注意,如果应用了额外的orderByAscending()/ orderByDescending()约束,它将优先于距离排序。

更新

我使用Parse-1.8.0.jar,我使用AscDesc排序顺序进行了2次查询,一切正常,请参阅下面的日志:

Ascending by CreateAt
CreateAt: Fri Dec 26 17:15:35 EET 2014, location: ParseGeoPoint[10.000000,10.000000]
CreateAt: Fri Dec 26 17:15:49 EET 2014, location: ParseGeoPoint[20.000000,20.000000]
CreateAt: Fri Dec 26 17:15:56 EET 2014, location: ParseGeoPoint[15.000000,15.000000]
CreateAt: Fri Dec 26 17:16:09 EET 2014, location: ParseGeoPoint[13.000000,13.000000]
CreateAt: Fri Dec 26 17:16:18 EET 2014, location: ParseGeoPoint[22.000000,22.000000]
CreateAt: Fri Dec 26 17:16:29 EET 2014, location: ParseGeoPoint[0.000000,1.000000]
CreateAt: Fri Dec 26 17:16:34 EET 2014, location: ParseGeoPoint[1.000000,0.000000]
CreateAt: Fri Dec 26 17:16:40 EET 2014, location: ParseGeoPoint[3.000000,3.000000]
Descending by CreateAt
CreateAt: Fri Dec 26 17:16:40 EET 2014, location: ParseGeoPoint[3.000000,3.000000]
CreateAt: Fri Dec 26 17:16:34 EET 2014, location: ParseGeoPoint[1.000000,0.000000]
CreateAt: Fri Dec 26 17:16:29 EET 2014, location: ParseGeoPoint[0.000000,1.000000]
CreateAt: Fri Dec 26 17:16:18 EET 2014, location: ParseGeoPoint[22.000000,22.000000]
CreateAt: Fri Dec 26 17:16:09 EET 2014, location: ParseGeoPoint[13.000000,13.000000]
CreateAt: Fri Dec 26 17:15:56 EET 2014, location: ParseGeoPoint[15.000000,15.000000]
CreateAt: Fri Dec 26 17:15:49 EET 2014, location: ParseGeoPoint[20.000000,20.000000]
CreateAt: Fri Dec 26 17:15:35 EET 2014, location: ParseGeoPoint[10.000000,10.000000]