Я использую GeoFire, чтобы получить всех пользователей с определенным радиусом.Когда я добавляю addGeoQueryEventListener и затем использую цикл for, чтобы получить весь идентификатор пользователя, вместо того, чтобы возвращать UserID, он уходит в другое гнездо глубже, возвращая g и 1.
private int radius = 40;
private Boolean userFound = false;
private String userLocationID;
private ArrayList<String> mUserIDLocation;
final UserLocation userLocation = new UserLocation();
public void getUserLocation() {
mUserIDLocation = new ArrayList<String>();
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
return;
}
fusedLocationClient.getLastLocation().addOnSuccessListener((Activity) MainActivity.this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
//Toast.makeText(this, "UserLocation " + location.toString(), Toast.LENGTH_SHORT ).show();
//final Location userLocation = location;
Log.d(TAG, "onSuccess: UserLocation" + location);
Log.d(TAG, "onSuccess: UserLocation Latitude " + location.getLatitude());
String user_id = FirebaseAuth.getInstance().getCurrentUser().getUid();
final DatabaseReference mRef = FirebaseDatabase.getInstance().getReference();
final GeoFire geoFire = new GeoFire(mRef.child("user_location"));
geoFire.setLocation(user_id, new GeoLocation(location.getLatitude(), location.getLongitude()), new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
}
});
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(location.getLatitude(), location.getLongitude()), radius);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
@Override
public void onDataEntered(DataSnapshot dataSnapshot, GeoLocation location) {
Log.d(TAG, "onDataEntered: DataSnapshot Key " + dataSnapshot);
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
mFollowing.add(snapshot.getKey());
}
getPost();
Log.d(TAG, "onDataEntered: mFollowing " + mFollowing);
Log.d(TAG, "onDataEntered: mFollowing size " + mFollowing.size());
}
@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) {
}
});
}
}
});
}
Журнал для снимка базы данных:
onDataEntered: DataSnapshot ключ DataSnapshot {ключ = xjfXxJ3spuPNywtHyqg5rNnlIMD3, значение = {.priority = c295tcm4kd, L = {0 = 48,435, 1 = -122,084}, г = c295tcm4kd}}
onDataEntered: DataSnapshot Key DataSnapshot {ключ = TMOb5NL8igZovGkiZdVcl3UQmxV2, значение = {.priority = c295myvnsd, l = {0 = 48.4319983, 1 = -122.084}, g = c295myvnsd}} 1012 * * *2 * * 0в mFollowing ArrayList: onDataEntered: mFollowing [g, l] onDataEntered: mFollowing [g, l, g, l]
Журнал для размера mFollowing ArrayList: onDataEntered: mFollowing size2 onDataEntered: размер mFollowing 4
Изображение моей базы данных: введите описание изображения здесь
То, что я ожидаю, произойдет при добавлении идентификатора пользователяк mFollowing икогда я запускаю журнал для mFollowing, я вижу только 2 идентификатора пользователя в массиве и число равно 2.