Если имя пользователя хранится в виде поля в документе пользователя, вы можете получить его с помощью:
query.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData().get("username"));
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
Дополнительные примеры можно найти в документации Firebase по выполнение запроса .
Обратите внимание, что обычно документы пользователя хранятся с UID в качестве ключа, что упрощает их поиск.
Хранение документов вот так, вы бы сделали что-то вроде:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore.getInstxance()
.collection("users")
.document(uid)
.set(...)
И тогда вы получите это с помощью:
FirebaseFirestore.getInstxance()
.collection("users")
.document(uid)
.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
Вы заметите, что теперь мы больше не нуждаемся в l oop, который у нас был ранее, так как мы получаем один конкретный c документ вместо необходимости запрашивать документ (ы) для пользователя.