Как я могу подсчитать доступного пользователя в конкретном радиусе локатора с помощью запроса Geofire?

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

Решение

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
  }
});
Другие вопросы по тегам