Ниже мой код. Каждый код работает до тех пор, пока я не перейду к фильтрации пользователей, когда я проверяю, являются ли пользователи женщинами, он возвращает только 1 пользователя 6 раз в моем массиве и на карте. Я сделал то же самое в Swift, и он отлично работает.
public void getNearby (местоположение GeoLocation) {GeoLocation center = new GeoLocation (location.latitude, location.longitude);
final GeoQuery nearQuery = geoFire.queryAtLocation(center, 1.6);
nearQuery.setRadius(1.6);
nearQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
String dbKey = key;
if (dbKey != null) {
profileRef.child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
String userKey = dataSnapshot.getKey();
user3 = dataSnapshot.getValue(User3.class);
Log.v("Check", user3.toString());
if (userKey.equals(userId)) {
Log.v("IDUser", user.getUid());
} else if (!userKey.equals(userId)) {
Log.v("LogGeo", user3.getUid());
database.getReference().child("Blocked").child(userId).child(user3.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
Log.v("Snaps", "You blocked everyone!");
} else {
database.getReference().child("users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, String> cMap = (Map<String, String>) dataSnapshot.getValue();
String seeking = cMap.get("seeking");
if (seeking.equals("Woman")) {
database.getReference().child("users").child(user3.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snap) {
Map<String, String> map = (Map<String, String>) snap.getValue();
String gender = map.get("gender");
String age = map.get("age");
int ageN = Integer.parseInt(age);
int minAgeN = Integer.parseInt(minAge);
int maxAgeN = Integer.parseInt(maxAge);
if (gender.equals("Female")) {
if ((ageN >= minAgeN) && (ageN <= maxAgeN)) {
user3ArrayList.add(user3);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else if (seeking.equals("Man")) {
database.getReference().child("users").child(user3.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
String gender = map.get("gender");
String age = map.get("age");
int ageN = Integer.parseInt(age);
int minAgeN = Integer.parseInt(minAge);
int maxAgeN = Integer.parseInt(maxAge);
if (gender.equals("Male")) {
if ((ageN >= minAgeN) && (ageN <= maxAgeN)) {
user3ArrayList.add(user3);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else if (seeking.equals("Both")) {
database.getReference().child("users").child(user3.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
String age = map.get("age");
int ageN = Integer.parseInt(age);
int minAgeN = Integer.parseInt(minAge);
int maxAgeN = Integer.parseInt(maxAge);
if ((ageN >= minAgeN) && (ageN <= maxAgeN)) {
user3ArrayList.add(user3);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
}