2017-04-09 45 views
0

我的应用使用Firebase数据库显示事件列表。 从应用程序启动的那一刻开始,我得到用户当前位置,如果它发生更改,则会更新它。 我想要做的是根据用户当前位置显示事件列表,从最接近的事件到最远的过滤从最近到最远的位置的列表

我在我的应用程序中实现了Geofire并获取了给定Radius的所有事件,但不幸的是,它们并未根据距离最近的距离进行过滤。

据我所知,Geofire不支持这种过滤功能(但如果我错了,请不要犹豫纠正)。

但是,在我的适配器中,我得到一个模型的列表,我可以实时过滤,每个模型都有一个带有坐标属性的值。 那么有谁知道如何基于坐标字符串或位置对象进行过滤?

干杯

回答

0

你可以做的是:

1)的距离属性(双域)添​​加到您的活动对象;

2)从用户计算距离:

double distance = GeoUtils.distance(userLoc.getLatitude(), userLoc.getLongitude(), eventLatitude, eventLongitude); 
event.setDistanceInMeters(distance); 

3)在完成了Geofire调用顺序您的活动的集合:

Collections.sort(eventsList, new Comparator<Event>() { 
      @Override 
      public int compare(Eventt1, Eventt2) { 
       return Double.valueOf(t1.getDistanceInMeters()).compareTo(t2.getDistanceInMeters()); 
      } 
     }); 

4)....;

5)利润;