Не могу записать данные в базу данных firebase firestore - PullRequest
0 голосов
/ 02 апреля 2020

Мне удалось вставить данные для аутентификации, но не удалось вставить в базу данных:

Код :

fullname = findViewById(R.id.Ifullname);
        password = findViewById(R.id.Ipassword);
        email = findViewById(R.id.Iemail);
        RegisterBtn = findViewById(R.id.button);
        fAuth = FirebaseAuth.getInstance();
        fStore = FirebaseFirestore.getInstance();
        loginBtn = findViewById(R.id.LoginBtn);
RegisterBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String FullName = fullname.getText().toString().trim();
                String Password = password.getText().toString().trim();
                String Email = email.getText().toString().trim();
fAuth.createUserWithEmailAndPassword(Email, Password).addOnCompleteListener(new OnCompleteListener<AuthResult>(){
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task){
                        if(task.isSuccessful()){
                            Toast.makeText(Register.this, "User Created.", Toast.LENGTH_SHORT).show();
                            UserID = fAuth.getCurrentUser().getUid();
                            DocumentReference documentReference = fStore.collection("users").document(UserID);
                            Map<String,Object> user = new HashMap<>();
                            user.put("FName", fullname);
                            user.put("Email",email);
                            user.put("Password",password);
//problem seems to be this line  
documentReference.set(user).addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    Log.d(TAG, "onSuccess: user Profile is created");
                                }

                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    Log.d(TAG, "onFailure:"+e.toString());

                                }
                            });

Ошибка :

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.budgetingapp, PID: 11507 java .lang.RuntimeException: Обнаружены конфликтующие получатели для имени getText в классе androidx.appcompat.widget. AppCompatEditText на com.google.firebase.firestore.util.CustomClassMapper $ BeanMapper. (Com.google.firebase: firebase-firestore @@ 21.4.1: 629) на com.google.firebase.firestore.util.CustomClassMapper.loadOrCreateBeans ( .google.firebase: firebase-firestore @@ 21.4.1: 377) по адресу com.google.firebase.firestore.util.CustomClassMapper.serialize (com.google.firebase: firebase-firestore @@ 21.4.1: 177) по адресу com. .google.firebase.firestore.util.CustomClassMapper.serialize (com.google.firebase: firebase-firestore @@ 21.4.1: 140) в com.google.firebase.firestore.util.CustomClassMapper.serialize (com.google.firebase : firebase-firestore @@ 21.4.1: 104) a t com.google.firebase.firestore.util.CustomClassMapper.convertToPlainJavaTypes (com.google.firebase: firebase-firestore @@ 21.4.1: 78) в com.google.firebase.firestore.UserDataReader.convertAndParseDocumentData (com.google.firebase : firebase-firestore @@ 21.4.1: 231) на com.google.firebase.firestore.UserDataReader.parseSetData (com.google.firebase: firebase-firestore @@ 21.4.1: 75) на com.google.firebase.firestore .DocumentReference.set (com.google.firebase: firebase-firestore @@ 21.4.1: 166) по адресу com.google.firebase.firestore.DocumentReference.set (com.google.firebase: firebase-firestore @@ 21.4.1: 146) на com.example.budgetingapp.Register $ 1 $ 1.onComplete (зарегистрируйтесь. java: 95) на com.google. android .gms.tasks.zzj.run (неизвестный источник: 4 ) в android .os.Handler.handleCallback (Обработчик. java: 873) в android .os.Handler.dispatchMessage (Обработчик. java: 99) в android .os.Looper.l oop (Looper. java: 193) в android .app.ActivityThread.main (ActivityThread. java: 6669) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 493) на com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 858)

1 Ответ

0 голосов
/ 02 апреля 2020

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

String FullName = fullname.getText().toString().trim();
String Password = password.getText().toString().trim();
String Email = email.getText().toString().trim();
/* ... */
user.put("FName", fullname);
user.put("Email",email);
user.put("Password",password);

Я рекомендую принять некоторые соглашения об именах, чтобы предотвратить это. Я лично рекомендую <short-object-type><variable-name>, записанный в camelCase.

Button     #button   -> #btnRegister
Button     #LoginBtn -> #btnLogin
TextField  #fullname -> #txtFullName
TextField  #email    -> #txtEmail
TextField  #password -> #txtPwd

Иногда бывает также полезно отличить guish частных переменных уровня объекта от локальных переменных, обычно добавляя m (для моего) в начале имени:

mBtnRegister.setOnClickListener(...);
Button btnScripted = new Button(...);

Переменные следует указывать в camelCase (или UPPER_SNAKE_CASE для констант), а не в PascalCase, чтобы они не были ошибочно определены как классы, интерфейсы и т. д. c. Вы можете увидеть это в действии, посмотрев на подсветку синтаксиса блоков кода StackOverflow.


String fullname = txtFullName.getText().toString().trim();
String password = txtPwd.getText().toString().trim();
String email = txtEmail.getText().toString().trim();
/* ... */
user.put("fname", fullname);
user.put("email", email);
// do not store passwords!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...