2014-12-25 24 views
2

我们正在使用Parse.com制作一个基于位置的Android聊天应用程序,我已经保存了我的聊天位置在“聊天”分析类。我们希望在给定位置的聊天内容显示在我们的应用中,并且它们必须按照“createdTime”(最新的第一次)的降序排列。对于查询,我使用以下代码。Parse.com查询附近的项目和排序与时间不距离

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 
      } 
     } 

检索到的列表不符合要求,并且分析考虑排序的距离并弄乱列表。当使用“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

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

从parse Android docs

注意,如果施加附加orderByAscending()/ orderByDescending()约束,它将优先于距离排序。

更新:

我用Parse-1.8.0.jar,我没2个查询与AscDesc排序顺序,一切都按预期看日志吼叫:

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] 
+0

感谢您的答复,我要优先于被orderByDescending约束接管并且不想要距离来扮演任何角色。我的意思是让所有的聊天在该地区,并显示他们的时间。那可能吗?我尝试了各种组合,但它没有工作...... :( 我试过你的解决方案,如果我在一个区域内有超过10个聊天(查询聊天),然后检索聊天不是最新的聊天...我得到年长的聊天,这是 – engico

+0

@engico更新回答问题 – gio

+0

仍然没有为我工作,我有很多同一位置的聊天记录,这可能是一个问题吗?你已经使用了和我一样的代码来获得这些结果吗?我认为它是可能的以解析云代码得到所需的输出,你可以帮我解决这个问题吗?我也遇到了错误... – engico