使用 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) {
}
});
此方法未计算此位置范围内所有可使用的用户。请帮忙。
答案 0 :(得分:0)
为该范围内的每个节点调用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
}
});