如何使用 geofire 查询计算特定位置半径中的可用用户?
Posted
技术标签:
【中文标题】如何使用 geofire 查询计算特定位置半径中的可用用户?【英文标题】:how can i count the available user in specific loaction radius with geofire query? 【发布时间】:2019-03-27 04:54:22 【问题描述】:现在 m 使用 dataSnapshot.getChildrenCount 但它只计算子节点中可用的节点。
这是我的代码
GeoFire geoFire = new GeoFire(ref.child("Userlocation"));
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), Raius);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener()
@Override
public void onDataEntered(DataSnapshot dataSnapshot, GeoLocation location)
int userCounter = (int) dataSnapshot.getChildrenCount();
ads5_userCounter.setText(userCounter + "");
@Override
public void onDataExited(DataSnapshot dataSnapshot)
@Override
public void onDataMoved(DataSnapshot dataSnapshot, GeoLocation location)
@Override
public void onDataChanged(DataSnapshot dataSnapshot, GeoLocation location)
@Override
public void onGeoQueryReady()
@Override
public void onGeoQueryError(DatabaseError error)
);
此方法未计算此位置半径内的所有可用用户。请帮忙。
【问题讨论】:
嗨山姆,你能解释一下你的问题吗?例如,您可以分享您的 firebase 结构并展示您需要从中获得什么。 【参考方案1】:为范围内的每个节点调用onDataEntered
方法。一旦为最初在范围内的所有节点调用了onDataEntered
,就会调用onGeoQueryReady
方法。这意味着您可以在onDataEntered
中增加一个计数器,然后在onGeoQueryReady
中显示它。
long count = 0;
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener()
@Override
public void onDataEntered(DataSnapshot dataSnapshot, GeoLocation location)
count++;
@Override
public void onDataExited(DataSnapshot dataSnapshot)
@Override
public void onDataMoved(DataSnapshot dataSnapshot, GeoLocation location)
@Override
public void onDataChanged(DataSnapshot dataSnapshot, GeoLocation location)
@Override
public void onGeoQueryReady()
ads5_userCounter.setText(""+count);
@Override
public void onGeoQueryError(DatabaseError error)
throw databaseError.toException(); // don't ignore errors
);
【讨论】:
谢谢你,坦率地说,我正在考虑,但如果正在寻找直接的方法。但再次感谢。以上是关于如何使用 geofire 查询计算特定位置半径中的可用用户?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用geofire查询检查10公里半径内是不是存在firebase用户