#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. Я отредактировал свой вопрос после использования вашего решения, потому что всегда возникает проблема.