Android - Как показать созданного пользователя в Firestore - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь показать созданную информацию о пользователе / ​​пользователе в моей базе данных 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;
    }
}

Проблема - имя, а фамилия не создается в базе данных, как это должно быть.Идентификатор неверен (я все еще не уверен, что назначить в качестве идентификатора пользователям, чтобы они были уникальными), и список вопросов - это еще одна вещь, которую мне все еще нужно выяснить.

enter image description here

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