如何使用 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用户

Android geofire获取一定半径内的用户列表

GeoFire查询数据列表

GeoFire的半径单位是多少?

将 GeoFire 查询加载到 RecyclerView 时应用程序崩溃

Twitter - 查询特定地理位置半径内的推文