Я пытаюсь показать созданную информацию о пользователе / пользователе в моей базе данных firestore, но не могу ее получить.У меня уже создан вопрос model
, который будет отображаться при отправке нового вопроса, однако, когда я пытаюсь создать user
, информация не отображается в базе данных.
В идеале, конечно, яХотелось бы иметь информацию в базе данных.Я также хотел бы показать, что вопрос был создан автором.
Любая помощь приветствуется.Я читал серию учебных пособий, пытаясь объединить их все, чтобы заставить мой код работать, но я борюсь за эту часть.
Вот мой относительный код:
SignUpActivity.java
private void registerUser() {
final String email = editTextEmail.getText().toString().trim();
final String userName = editTextUserName.getText().toString().trim();
String password = editTextPassword.getText().toString().trim();
final List<Question> questionsList = new ArrayList<>();
final String firstName = "default firstName";
final String lastName = "default lastName";
CollectionReference usersRef = FirebaseFirestore.getInstance().collection("Users");
User userInfo = new User(userName, firstName, lastName, email, questionsList);
// DocumentReference docPath = FirebaseFirestore.getInstance().document(mAuth.getCurrentUser()).
userInfo.setUserName(userName);
usersRef.add(userInfo);
mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (task.isSuccessful()) {
CollectionReference usersRef = FirebaseFirestore.getInstance().collection("Users");
usersRef.add(new User(userName, firstName, lastName, email, questionsList));
FirebaseUser user = mAuth.getCurrentUser();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
UserProfileChangeRequest profileChangeRequest = new UserProfileChangeRequest.Builder()
.setDisplayName(userName).build();
user.updateProfile(profileChangeRequest);
}
}
};
mAuth.addAuthStateListener(mAuthListener); // need this to change info on Firebase Firestore
String usernameTest = user.getDisplayName();
Toast.makeText(SignUpActivity.this, "info saved hopefully", Toast.LENGTH_SHORT).show();
finish();
startActivity(new Intent(SignUpActivity.this, DashboardActivity.class));
} else {
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(getApplicationContext(), "You are already registered", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
}
}
});
}
NewQuestionActivity.java
private void saveQuestion(){
String questionString = questionEditText.getText().toString();
String questionAnswerString = answerEditText.getText().toString();
String authorFirebase = FirebaseAuth.getInstance().getCurrentUser().toString(); //TODO: HOW TO SET THIS Author
authorTextView.setText(authorFirebase);
int priority = numberPickerPriority.getValue();
String tagInput = editTextTags.getText().toString();
String[] tagArray = tagInput.split("\\s*, \\s*");
List<String> tags = Arrays.asList(tagArray);
if (questionString.trim().isEmpty() || questionAnswerString.trim().isEmpty()) {
Toast.makeText(this, "Please insert a question and a proposed answer", Toast.LENGTH_SHORT).show();
return;
}
CollectionReference questionRef = FirebaseFirestore.getInstance().collection("Questions");
questionRef.add(new Question(questionString, questionAnswerString, priority, tags, authorFirebase));
Toast.makeText(this, "Question Added", Toast.LENGTH_SHORT).show();
finish();
}
usermodel
package com.example.stairmaster.models;
import java.util.List;
import androidx.databinding.BaseObservable;
import com.google.firebase.firestore.Exclude;
public class User extends BaseObservable {
@Exclude
private int id;
private String firstName;
private String lastName;
private String userName;
private String email;
private List<Question> questions;
public User() {
// no arg constructor needed
}
public User(String firstName, String lastName, String userName, String email, List<Question> questions) {
this.firstName = firstName;
this.lastName = lastName;
this.userName = userName;
this.email = email;
this.questions = questions;
}
public int getId() {
return id;
}
public String getUserName(String userName) { return userName;}
public void setUserName(String userName) { this.userName = userName; }
public String getFirstName(String firstName) {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName(String lastName) {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail(String email) {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Question> getQuestions() {
return questions;
}
}
Проблема - имя, а фамилия не создается в базе данных, как это должно быть.Идентификатор неверен (я все еще не уверен, что назначить в качестве идентификатора пользователям, чтобы они были уникальными), и список вопросов - это еще одна вещь, которую мне все еще нужно выяснить.