Как я могу подсчитать доступного пользователя в конкретном радиусе локатора с помощью запроса 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
}
});