Отображение данных в FireStore для Android

#java #android #firebase

#java #Android #firebase

Вопрос:

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

Интерфейс

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

База данных

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

 public class SettingsFragment extends Fragment {

private TextView pseudo, name, surname, mail, age;

private FirebaseAuth firebaseAuth;
private FirebaseFirestore firebaseFirestore;
private FirebaseUser firebaseUser;

private Button logout, deleteAccount, modifyAccount;
ProgressDialog progressDialog;

public SettingsFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_settings, container, false);

    firebaseAuth = FirebaseAuth.getInstance();
    firebaseFirestore = FirebaseFirestore.getInstance();
    firebaseUser = firebaseAuth.getCurrentUser();

    logout = (Button) view.findViewById(R.id.btLogout);
    deleteAccount = (Button) view.findViewById(R.id.btDelete);
    modifyAccount = (Button) view.findViewById(R.id.btModify);
    pseudo = (TextView) view.findViewById(R.id.tvUserPseudo);
    name = (TextView) view.findViewById(R.id.tvUserName);
    surname = (TextView) view.findViewById(R.id.tvUserSurname);
    mail = (TextView) view.findViewById(R.id.tvUserEmail);
    age = (TextView) view.findViewById(R.id.tvUserAge);

    progressDialog = new ProgressDialog(view.getContext());

    String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DocumentReference documentReference = firebaseFirestore.collection("Users").document(currentuser);
    documentReference.addSnapshotListener(getActivity(), new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
            pseudo.setText(documentSnapshot.getString("Pseudo"));
            name.setText(documentSnapshot.getString("Name"));
            surname.setText(documentSnapshot.getString("Surname"));
            mail.setText(documentSnapshot.getString("Mail"));
            age.setText(documentSnapshot.getString("Age"));
        }
    });

    modifyAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getActivity().finish();
            Intent intent = new Intent(getActivity(), EditProfileActivity.class);
            getActivity().startActivity(intent);
        }
    });

    logout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getActivity(), "Déconnexion réussie", Toast.LENGTH_SHORT).show();
            firebaseAuth.signOut();
            getActivity().finish();
            Intent intent = new Intent(getActivity(), ConnectionActivity.class);
            getActivity().startActivity(intent);
        }
    });

    deleteAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(view.getContext());
            dialog.setTitle("Êtes-vous sur ?");
            dialog.setMessage("Supprimer ce compte sera définitif et vous ne pourrez plus revenir en arrière.");
            dialog.setPositiveButton("Supprimer", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    progressDialog.setMessage("Suppression du compte en cours");
                    progressDialog.show();
                    firebaseUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(getActivity(), "Compte supprimer avec succès", Toast.LENGTH_SHORT).show();
                                progressDialog.dismiss();
                                getActivity().finish();
                                Intent intent = new Intent(getActivity(), ConnectionActivity.class);
                                getActivity().startActivity(intent);
                            } else {
                                Toast.makeText(getActivity(), "Une erreur est survenue", Toast.LENGTH_SHORT).show();
                                progressDialog.dismiss();
                            }
                        }
                    });
                }
            });

            dialog.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            });

            AlertDialog alertDialog = dialog.create();
            alertDialog.show();

        }
    });

    return view;

}

private void getData() {
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();

    db.collection("Users")
            .whereEqualTo("uId", currentuser)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (DocumentSnapshot document : task.getResult()) {

                            pseudo.setText((CharSequence) document.get("Pseudo"));
                            name.setText((CharSequence) document.get("Name"));
                            surname.setText((CharSequence) document.get("Surname"));
                            mail.setText((CharSequence) document.get("Email"));
                            age.setText((CharSequence) document.get("Age"));

                        }
                    }
                }
            });
}
 

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

Комментарии:

1. Я только что вернулся к начальной версии. Пожалуйста, не редактируйте вопрос другими вопросами, связанными с новыми проблемами.

Ответ №1:

При использовании следующей строки кода:

 db.collection("Users")
        .whereEqualTo("uId", currentuser)
 

Вы просите Firestore вернуть все документы, в которых свойство «uId» содержит значение «currentuser», что на самом деле не работает, поскольку в вашем документе нет свойства, которое содержит такое значение. Вместо этого вам следует создать объект DocumentReference:

 DocumentReference currentuserRef = db.collection("Users").document(currentuser);
 

И получите данные в соответствии с документами:

Комментарии:

1. Я отредактировал свой вопрос после использования вашего решения, потому что всегда возникает проблема.