Firebase Firestore Query help android stuido java - PullRequest
0 голосов
/ 19 апреля 2020

Хорошо, вот моя проблема. Я создал базу данных firestore под названием «users» и добавил каждому UID из аутентификации и имя пользователя, которое они могут выбрать. Я хочу отобразить их имя пользователя в текстовом поле.

Итак, я сделал:

private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference noteRef;

String currentUid = mAuth.getCurrentUser().getUid();
noteRef = db.collection("users");
Query query = noteRef.whereEqualTo("uid", currentUid);

, но теперь я не в курсе ... Итак, сначала я взял UID currentUser, который зарегистрирован в app и хочу найти в моей базе данных firestore в «users» запись с тем же UID, поэтому я сделал этот запрос. Проблема в том, как я могу получить сейчас имя пользователя? Я думаю, запрос доставляет запись, которую я ищу, но как мне теперь получить имя пользователя?

1 Ответ

0 голосов
/ 19 апреля 2020

Если имя пользователя хранится в виде поля в документе пользователя, вы можете получить его с помощью:

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 документ вместо необходимости запрашивать документ (ы) для пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...