Как я могу посчитать доступного пользователя в конкретном радиусе локатора с запросом Geofire? - PullRequest
0 голосов
/ 23 октября 2018

прямо сейчас, используя 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) {

        }
    });

этот метод несчитая всех пользователей, доступных в этом радиусе местоположения.пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 октября 2018

Метод 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
  }
});
...