Android: получить значения полей из вложенной коллекции. - PullRequest
0 голосов
/ 09 апреля 2020

Есть ли способ получить данные из подгруппы? Ниже приведена структура моей базы данных, для каждого пользователя будет создан только один документ во вложенной коллекции «userinfo» для хранения только имени пользователя и электронной почты.

Я пытаюсь получить значения "username" и "email" из Firestore, а затем установить значения в виде строк:

String username =? String email =?

"main"(root_collection)
            |
            |=>userid1(auto-generated)
                         |                  
                         |=>"userinfo"(sub-collection)=>documentID(auto)=>username: mary
                         |                                              =>email:mary@gmail.com
                         |                                             
                         |                            
                         |=>"emotions"(sub-collection)=>documentID(auto)=>happy: true
                                                                        =>sad:false
                                                                        =>depressed:false

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

String value = documentSnapshot.getString("field");

, но я до сих пор не знаю, как это сделать ? Я написал кое-что, и я не знаю, как получить ценность.

 FirebaseAuth mAuth = FirebaseAuth.getInstance();
        String userId = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();

        FirebaseFirestore db = FirebaseFirestore.getInstance();
        CollectionReference userRef = db.collection("main").document(userId).collection("userinfo");

        userRef.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                //get the value
                String value = queryDocumentSnapshots.getDocuments("username"); // how ??
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(SettingsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

также есть класс объектов UserInfo

import java.io.Serializable;

public class UserInfo implements Serializable {

    private String email, username;

    public UserInfo() {}

    public UserInfo(String email, String username) {
        this.email = email;
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

Пожалуйста, помогите, большое спасибо.

1 Ответ

2 голосов
/ 09 апреля 2020

Есть ли способ получить данные из подсборки?

Да, есть. Чтобы получить эти данные, вам нужно l oop просмотреть результат, как показано в следующих строках кода:

userRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                String value = document.getString("username");
                Log.d("TAG", value);
            }
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

Результат в logcat будет:

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