Привет всем, я видел несколько вопросов по этому вопросу, но ни один, кажется, не отвечает на мой конкретный вопрос. Я пытаюсь получить список пользователей на основе их расстояния. Моя база данных Firebase выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/ngWfr.jpg)
В MainActivity
я бы запустил следующие методы, чтобы получить результат:
private List<User> generateProfiles(){
uidList = getUserList();
Log.d("UidList",String.valueOf(uidList.size()));
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference phoneNumberRef = rootRef.child("users");
phoneNumberRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
try{
User tempUser = ds.getValue(User.class);
userList.add(tempUser);
}
catch (IndexOutOfBoundsException e) {
Log.d("Index EXception", e.getMessage());
}
}
Log.d("PRIORUSER", userList.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return userList;
}
Который вызывает этот метод для получения списка пользователей в пределах расстояния запроса Geofire:
private List<String> getUserList(){
try{
mFusedLocationClient.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
uidList.clear();
double lattitude = location.getLatitude();
double longitude = location.getLongitude();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("GeoFire");
GeoFire fire = new GeoFire(ref);
GeoQuery geoQuery = fire.queryAtLocation(new GeoLocation(lattitude,longitude),8);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
uidList.add(key);
uidList.remove(auth.getUid());
Log.d("UserUID",auth.getUid());
Log.d("List",uidList.toString());
}
@Override
public void onKeyExited(String key) {
uidList.remove(key);
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
Log.d("GeoError",error.getMessage());
}
});
}
});
//asiudhauisdhuasuidas
}
catch(SecurityException e){
}
return uidList;
}
Я задаюсь вопросом, правильна ли моя установка с точки зрения наличия отдельного каталога geofire по сравнению с пользователями, и следует ли хранить данные geofire у каждого отдельного пользователя.
Моя проблема в том, что если я тогда попытаюсь перебрать UidList, чтобы получить только uid, которые находятся в запросе geofire, я либо получаю нулевой возврат, либо возврат всех пользователей.
У кого-нибудь есть рабочее решение? Конечное состояние Я хотел бы получить список пользовательских объектов.