首页 > 解决方案 > 如何使用 geofire 查询计算特定位置半径中的可用用户?

问题描述

现在 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) {

        }
    });

此方法未计算此位置半径内的所有可用用户。请帮忙。

标签: androidfirebasefirebase-realtime-databasegeofire

解决方案


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

推荐阅读