我们正在使用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”标签的聊天,然后只使用距离远的那些聊天,那么它对我有效。但这不是实现分页的最佳解决方案。
答案 0 :(得分:0)
您需要删除query.addDescendingOrder("createdAt");
并手动对查询结果进行排序。
来自Parse Android docs
请注意,如果应用了额外的orderByAscending()/ orderByDescending()约束,它将优先于距离排序。
更新
我使用Parse-1.8.0.jar
,我使用Asc
和Desc
排序顺序进行了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]