Хобрук: Ваш путь к мастерству в программировании

Получить данные текущего вошедшего в систему пользователя из Firestore

Я пробовал много раз, но все еще не мог отобразить текущие данные пользователя. Я хотел бы получить данные из базы данных Firestore на страницу профиля пользователя, но оставьте поле пустым.

Вот мой register.java:

public class Register extends AppCompatActivity {

//Variables
TextInputLayout username, email, PhoneNo, password;
RadioGroup radioGroup;
RadioButton selectedElderly, selectedGuardian;
Button regBtn, regToLoginBtn;

FirebaseAuth fAuth;
FirebaseFirestore fStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    fAuth = FirebaseAuth.getInstance();
    fStore = FirebaseFirestore.getInstance();

    //Hooks to all xml elements in activity_register.xml
    username = findViewById(R.id.reg_username);
    email = findViewById(R.id.reg_email);
    PhoneNo = findViewById(R.id.reg_phoneNo);
    password = findViewById(R.id.reg_password);
    regBtn = findViewById(R.id.reg_btn);
    regToLoginBtn = findViewById(R.id.reg_login_btn);
    radioGroup = findViewById(R.id.radio_type);
    selectedGuardian = findViewById(R.id.radioGuardian);
    selectedElderly = findViewById(R.id.radioElderly);

    regToLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Register.this, Login.class);
            startActivity(intent);
        }
    });

    regBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (validateUsername() && validateEmail() && validatePhoneNo() && validateUserType() && validatePassword() == true) {
                Intent intent = new Intent(Register.this, Login.class);
                startActivity(intent);
            } else {
                validateUsername();
                validateEmail();
                validatePhoneNo();
                validateUserType();
                validatePassword();
            }
            fAuth.createUserWithEmailAndPassword(email.getEditText().getText().toString(), password.getEditText().getText().toString()).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                    FirebaseUser user = fAuth.getCurrentUser();
                    Toast.makeText(Register.this, "Account Created", Toast.LENGTH_SHORT).show();
                  
                    DocumentReference df = fStore.collection("Users").document(user.getUid());
                    Map<String, Object> userInfo = new HashMap<>();
                    userInfo.put("Username", username.getEditText().getText().toString());
                    userInfo.put("Email", email.getEditText().getText().toString());
                    userInfo.put("phoneNo", PhoneNo.getEditText().getText().toString());
                    userInfo.put("Password",password.getEditText().getText().toString());
                   
                    //specify the user is elderly
                    if (selectedElderly.isChecked()) {
                        userInfo.put("isElderly", "1");
                    }
                    if (selectedGuardian.isChecked()) {
                        userInfo.put("isGuardian", "1");
                    }

                    df.set(userInfo);
                    if (selectedElderly.isChecked()) {
                        startActivity(new Intent(getApplicationContext(), Login.class));
                        finish();
                    }
                    if (selectedGuardian.isChecked()) {
                        startActivity(new Intent(getApplicationContext(), Login.class));
                        finish();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(Register.this, "Failed to Create Account", Toast.LENGTH_SHORT).show();
                }
            });

                }

Вот profile.java:

public class profileGuardian extends AppCompatActivity {

TextInputLayout username, email, PhoneNo, password, address;
TextView usernameLabel, emailLabel;
Button save;
FirebaseAuth fAuth;
FirebaseFirestore fStore;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile_guardian);

    //Hooks
    username = findViewById(R.id.full_name_profile);
    email = (TextInputLayout) findViewById(R.id.email_profile);
    PhoneNo = (TextInputLayout) findViewById(R.id.phoneNo_profile);
    password = (TextInputLayout) findViewById(R.id.password_profile);
    address = (TextInputLayout) findViewById(R.id.address_profile);
    emailLabel = (TextView) findViewById(R.id.email_field);
    usernameLabel = (TextView) findViewById(R.id.username_field);
    save = findViewById(R.id.save_btn);

    getData();
}

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

    fStore.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()) {

                            emailLabel.setText((CharSequence) document.get("Email"));
                            usernameLabel.setText((CharSequence) document.get("Username"));
                            username.getEditText().setText((CharSequence) document.get("Username"));
                            email.getEditText().setText((CharSequence) document.get("Email"));
                            PhoneNo.getEditText().setText((CharSequence) document.get("phoneNo"));
                            password.getEditText().setText((CharSequence) document.get("Password"));
                        }
                    }
                }

            });
}

Вот моя структура базы данных:

структура базы данных

Я пробовал несколько решений на Youtube, но не смог.


  • Что именно в этом коде работает не так, как вы ожидаете? Расскажите нам, что не так с общим кодом. У вас есть ошибки? 08.03.2021
  • У меня нет ошибок, просто я хочу получить данные текущего зарегистрированного пользователя из хранилища на страницу профиля пользователя, но данные не вышли 08.03.2021
  • Так что я не знаю, где-то я неправильно реализовал коды ... 08.03.2021
  • Вы пробовали посмотреть, что будет, если задача не удалась? 08.03.2021
  • Нет .. Как это сделать? 08.03.2021
  • Добавьте часть else в свой оператор if и зарегистрируйте task.getException().getMessage(). Что-то напечатано в logcat? 08.03.2021
  • Судя по скриншоту, в ваших документах нет поля uId 08.03.2021
  • спасибо, ребята, мне не хватает поля uid, и теперь оно у меня есть, так что все работает нормально .. 09.03.2021

Ответы:


1

В представленном коде метод get возвращает результаты типа QuerySnapshot (ссылка). Я думаю, что task.getResult() получит QuerySnapshot объект, а не список документов, поэтому цикл не работает должным образом.

Согласно справке for вместо этого должен выглядеть примерно так:

for (DocumentSnapshot document : task.getResult().getDocuments())

чем должна быть возможность перебирать список документов, включенных в QuerySnapshot.

08.03.2021
Новые материалы

Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

AST для разработчиков JavaScript
TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

5 проектов на Python, которые нужно создать прямо сейчас!
Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..