Firebase Не будет создавать новые пользовательские данные в базе данных - PullRequest
0 голосов
/ 27 июня 2019

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

здесьSignUpActivity.java:

public class SignUpActivity extends AppCompatActivity {
    private FirebaseAuth mAuth;
    private EditText userEmail, userPassword1, userPassword2, userCode, userName, userDescription;
    private ImageView image;
    private ProgressDialog pDialog;
    private boolean imagePressed = false;
    private Uri filePath;
    private FirebaseStorage storage;
    private StorageReference storageReference;

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

        userCode = findViewById(R.id.userCode);
        userDescription = findViewById(R.id.userDescription);
        userEmail = findViewById(R.id.userEmail);
        userName = findViewById(R.id.userName);
        userPassword1 = findViewById(R.id.userPassword1);
        userPassword2 = findViewById(R.id.userPassword2);
        image = findViewById(R.id.userImageAdd);

        mAuth = FirebaseAuth.getInstance();

        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();

        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imagePressed = true;
                chooseImage();
            }
        });
    }

    private void chooseImage() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), Finals.PICK_IMAGE_REQUEST);

    }

    public void back(View view) {
        finish();
    }

    public void submit(View view) {
        pDialog = new ProgressDialog(this);
        if (TextUtils.isEmpty(userEmail.getText().toString())) {
            Toast.makeText(SignUpActivity.this, "Please enter email.", Toast.LENGTH_SHORT).show();
        } else if (TextUtils.isEmpty(userPassword1.getText().toString())) {
            Toast.makeText(SignUpActivity.this, "Please enter password.", Toast.LENGTH_SHORT).show();
        } else if (TextUtils.isEmpty(userPassword2.getText().toString())) {
            Toast.makeText(SignUpActivity.this, "Please repeat password.", Toast.LENGTH_SHORT).show();
        } else if (TextUtils.isEmpty(userName.getText().toString())) {
            Toast.makeText(SignUpActivity.this, "Please enter user name", Toast.LENGTH_SHORT).show();
        } else if (!userPassword1.getText().toString().equals(userPassword2.getText().toString())) {
            pDialog.dismiss();
            Toast.makeText(SignUpActivity.this, "The passwords don't match.", Toast.LENGTH_SHORT).show();
        } else {
            pDialog.setMessage("Creating account...");
            pDialog.show();
            pDialog.setCanceledOnTouchOutside(false);

            if (imagePressed && filePath != null) {
                final StorageReference ref = storageReference.child("users/" + UUID.randomUUID().toString());
                ref.putFile(filePath).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                    @Override
                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                        if (!task.isSuccessful()) {
                            throw task.getException();
                        }
                        return ref.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()) {
                            Uri downUri = task.getResult();
                            boolean isTrainer = trainer();
                            register(userEmail.getText().toString(), userPassword1.getText().toString(), userName.getText().toString(), userDescription.getText().toString(),
                                    downUri.toString(), isTrainer);
                        }
                    }
                });
            } else {
                boolean isTrainer = trainer();
                register(userEmail.getText().toString(), userPassword1.getText().toString(), userName.getText().toString(), userDescription.getText().toString(),
                        Finals.DEFAULT_USER_IMAGE_URL, isTrainer);
                finish();
            }
        }
    }

    private boolean trainer() {
        boolean trainer = false;
        if (!TextUtils.isEmpty(userCode.getText())) {
            if (userCode.getText().toString().equals(Finals.T_CODE))
                trainer = true;
            else if (!userCode.getText().toString().equals(Finals.T_CODE)) {
                pDialog.dismiss();
                Toast.makeText(this, "Not a real trainer code!", Toast.LENGTH_SHORT).show();
            }
        }
        return trainer;
    }

    private void register(final String regEmail, final String regPassword,
                          final String regName, final String regDesc, final String url, final boolean trainer) {
        mAuth.createUserWithEmailAndPassword(regEmail, regPassword).addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    FirebaseUser firebaseUser = mAuth.getCurrentUser();
                    String userId = firebaseUser.getUid();
                    HashMap<String, Object> hashMap = new HashMap<>();
                    hashMap.put("id", mAuth.getCurrentUser().getUid());
                    hashMap.put("name", regName);
                    hashMap.put("description", regDesc);
                    hashMap.put("isTrainer", trainer);
                    hashMap.put("imageUrl", url);
                    FirebaseDatabase.getInstance().getReference().child("users").child(userId).setValue(hashMap)
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                pDialog.dismiss();
                                Toast.makeText(SignUpActivity.this, "Created user", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(SignUpActivity.this, MainActivity.class));
                            } else {
                                pDialog.dismiss();
                                Toast.makeText(SignUpActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                } else {
                    pDialog.dismiss();
                    Toast.makeText(SignUpActivity.this, "Creation failed :" + task.getException(), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Finals.PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {
            filePath = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                image.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

раньше работал на моем предыдущем телефоне, но теперь он не работает на новом телефоне.что может вызвать эту ошибку?

Также не отображается диалоговое окно прогресса.

, когда я пытаюсь получить доступ к коду (скажем, в этой строке - DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("users").child(id);), он возвращает null.

Я также не получаю "Что-то пошло не так", просто он идет к LoginActivity (а не main Activity по какой-либо причине), который его вызвал, и затем я могу войти, используя нового пользователя.создан, но не может получить доступ к данным (это null).

Это правила базы данных: { "rules": { ".read": true, ".write": true } }

1 Ответ

0 голосов
/ 27 июня 2019

Каким-то образом переписывание кода по-разному исправило ошибку

новый код -

    private Context mContext;
    private String email, username, password1, password2, trainerCode, description, imageUrl = Finals.DEFAULT_USER_IMAGE_URL;
    private EditText mEmail, mPassword1, mPassword2, mUsername, mTrainerCode, mDescription;
    private Button btnSubmit, btnBack;
    private ImageView imageView;
    private ProgressDialog pDialog;
    private String userID;
    private boolean isTrainer, imagePressed = false;
    private Uri filePath;

    //firebase
    private FirebaseAuth mAuth;
    private FirebaseDatabase mFirebaseDatabase;
    private DatabaseReference myRef;
    private FirebaseStorage storage;
    private StorageReference storageReference;


    private View.OnClickListener imageClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            imagePressed = true;
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), Finals.PICK_IMAGE_REQUEST);

        }
    };


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up);
        mContext = SignUpActivity.this;
        pDialog = new ProgressDialog(this);

        mEmail = findViewById(R.id.userEmail);
        mUsername = findViewById(R.id.userName);
        btnSubmit = findViewById(R.id.btn_submit);
        mPassword1 = findViewById(R.id.userPassword1);
        mPassword2 = findViewById(R.id.userPassword2);
        mTrainerCode = findViewById(R.id.userCode);
        mDescription = findViewById(R.id.userDescription);
        imageView = findViewById(R.id.userImageAdd);
        btnBack = findViewById(R.id.backBtn);

        btnSubmit.setOnClickListener(btnSubmitListener);
        imageView.setOnClickListener(imageClickListener);
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        mAuth = FirebaseAuth.getInstance();
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        myRef = mFirebaseDatabase.getReference();
        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();
    }

    private View.OnClickListener btnSubmitListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            email = mEmail.getText().toString();
            username = mUsername.getText().toString();
            password1 = mPassword1.getText().toString();
            password2 = mPassword2.getText().toString();
            trainerCode = mTrainerCode.getText().toString();
            description = mDescription.getText().toString();
            isTrainer = false;

            if (checkInputs(email, username, password1, password2, trainerCode)) {
                pDialog.setMessage("Creating User...");
                pDialog.show();
                if (imagePressed && filePath != null)
                    uploadImage();
                else
                    registerNewUser();
            }
        }
    };

    private void uploadImage() {
        final StorageReference ref = storageReference.child("users/" + UUID.randomUUID().toString());
        ref.putFile(filePath).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()){
                    throw task.getException();
                }
                return ref.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                Uri downUri = task.getResult();
                imageUrl = downUri.toString();
                registerNewUser();
            }
        });
    }


    public void registerNewUser() {
        mAuth.createUserWithEmailAndPassword(email, password1)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            Toast.makeText(SignUpActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();

                        } else {
                            userID = mAuth.getCurrentUser().getUid();
                            addNewUser();
                        }

                    }
                });
    }

    private boolean checkInputs(String email, String name, String password1, String password2, String trainerCode) {
        if (email.equals("")) {
            Toast.makeText(mContext, "Please enter email", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (name.equals("")) {
            Toast.makeText(mContext, "Please enter name", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (password1.equals("")) {
            Toast.makeText(mContext, "Please enter password", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (password2.equals("")) {
            Toast.makeText(mContext, "Please repeat password", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (!password1.equals(password2)) {
            Toast.makeText(mContext, "Passwords don't natch", Toast.LENGTH_SHORT).show();
            return false;
        }
        if (!trainerCode.equals("")) {
            if (trainerCode.equals(Finals.T_CODE)) {
                isTrainer = true;
                return true;
            } else {
                Toast.makeText(mContext, "Not a real trainer code!", Toast.LENGTH_SHORT).show();
                return false;
            }
        }
        return true;
    }

    public void addNewUser() {

        UserClass user = new UserClass(description, email, userID, imageUrl, isTrainer, username, password1);

        myRef.child("users").child(userID).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    pDialog.dismiss();
                    Toast.makeText(mContext, "Created new User", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(SignUpActivity.this, MainActivity.class));
                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Finals.PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {
            filePath = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                imageView.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

Большое спасибо всем, кто пытался помочь!

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