Как получить и отобразить данные от пользователей, которые вошли в систему - Firestore - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь получить и отобразить информацию о моем пользователе, когда он вошел в систему. (Т. Е. Имя, адрес электронной почты, телефон)

Я пробовал несколько фрагментов, обнаруженных на YouTube и переполнении стека, но онипровалился.Большинство учебных пособий используют базу данных в реальном времени, а это не то, что я ищу.

Я также пытался создать объект "пользователи".

private void getData(){
        FirebaseFirestore db = FirebaseFirestore.getInstance();

        db.collection("users")
                //.document(FirebaseAuth.getInstance().getCurrentUser().getUid())
                .whereEqualTo("email:", FirebaseAuth.getInstance().getCurrentUser().getUid())
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (DocumentSnapshot document : task.getResult()) {
                                //Toast.makeText(getApplicationContext(),document.getId() +"==>" + document.getData(),Toast.LENGTH_LONG).show();
                                //Toast.makeText(getApplicationContext(),""+ document.get("Email") ,Toast.LENGTH_LONG).show();

                                nameEdt.setText((CharSequence) document.get("First Name"));
                                emailEdt.setText((CharSequence) document.get("Email"));
                                phoneEdt.setText((CharSequence) document.get("Phone"));


                            }
                        } else {
                            Toast.makeText(getApplicationContext(),"No such document",Toast.LENGTH_LONG).show();
                        }
                    }
                });
    }

Структура базы данных: db structure

Я понимаю, что документы в firestoreне связаны с пользователями, но я не знаю, как настроить мой код так, чтобы он только извлекал данные от пользователя, вошедшего в систему * Он отлично работает для вновь созданных учетных записей, но если бы я должен был войтиВыйдите из системы и войдите в систему с другим пользователем, он не будет обновлять «учетную запись / информацию о пользователе».

Короче говоря, как бы я мог получить доступ и отображать информацию о своей базе данных от зарегистрированных пользователей?

Дополнительные примечания: я использую электронную почту и пароль для аутентификации

Ответы [ 2 ]

3 голосов
/ 22 мая 2019

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

db.collection("users").document(FirebaseAuth.getInstance().getCurrentUser().getUid())
        .get().addOnCompleteListener(task -> {
    if(task.isSuccessful() && task.getResult() != null){
        String firstName = task.getResult().getString("First Name");
        String email = task.getResult().getString("Email");
        String phone = task.getResult().getString("Phone");
        //other stuff
    }else{
        //deal with error
    }
});

Оригинальный ответ :

Информация о пользователе не хранится в базе данных Firestore, она связана с Аутентификацией Firebase, которую вы настроили для входа в систему. Чтобы получить информацию о соответствующем пользователе, вам нужно использовать соответствующие API FirebaseAuth. Используйте это, чтобы получить текущий логин пользователя:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

Тогда вы можете получить имя и адрес электронной почты примерно так:

String name = user.getDisplayName();
String email = user.getEmail();

Подробнее см. В документации .


Если FirebaseAuth не разрешается, это, вероятно, означает, что вы не правильно следовали инструкциям по настройке и забыли включить зависимость в файл Gradle:

implementation 'com.google.firebase:firebase-auth:17.0.0'
0 голосов
/ 25 мая 2019

После нескольких дней, пытаясь найти решение, я обнаружил, что он может извлекать информацию о пользователях из базы данных. Однако важно отметить, что, поскольку мое приложение не содержит большого количества данных, эта структура работает для меня.

Так что я, по сути, был на правильном пути, но из-за некоторого недостатка в понимании огненной базы я пропустил несколько концепций.

    private void getData(){
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        final String current = user.getUid();//getting unique user id

        db.collection("users")
                .whereEqualTo("uId",current)//looks for the corresponding value with the field
                // in the database
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (DocumentSnapshot document : task.getResult()) {

                                nameEdt.setText((CharSequence) document.get("firstName"));
                                emailEdt.setText((CharSequence) document.get("email"));
                                phoneEdt.setText((CharSequence) document.get("phone"));
                                // These values must exactly match the fields you have in your db

                            }
                        } 

Как упоминалось ранее, документы не ассоциируются с пользователями, но вы МОЖЕТЕ связать их вместе, создав в своей базе данных поле под названием «все, что вы хотите» (я сделал мой uId). Это связано с тем, что firebase генерирует уникальный идентификатор для каждого пользователя при аутентификации. Создав поле, содержащее этот уникальный идентификатор, вы можете получить связанную информацию в этой коллекции.

bd struc

Как создать поле: Я создал «пользовательский» объект, который будет извлекать uid из моего текста редактирования. В моем коде я передавал uid везде, где создавал / аутентифицировал нового пользователя / учетную запись.

FirebaseUser testUser = FirebaseAuth.getInstance().getCurrentUser(); //getting the current logged in users id
                            String userUid = testUser.getUid();                       
                            String uidInput = userUid;

User user = new User(firstNameInput,lastNameInput,uidInput);

 db.collection("users").document(userUid)
                                    .set(user)
                                    .addOnSuccessListener(new OnSuccessListener<Void>() {

примечание: я полагаю, что вы также можете добавить его к своей хэш-карте, если вы сделали это таким образом.

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