Ошибка неподдерживаемого типа при отправке электронной почты в Firestore

#android #firebase #google-cloud-firestore

#Android #firebase #google-облако-firestore

Вопрос:

У меня проблема с сохранением данных (имя, фамилия, адрес электронной почты) в базе данных FireStore. Авторизация работает отлично — добавляются новые пользователи. Но затем я хочу сохранить эти 3 переменные из типа EditText в AndroidStudio в качестве нового документа Firebase. Но затем внезапно появляется ошибка в консоли:

 Process: com.example.poduszkowoapp, PID: 7276
    java.lang.IllegalArgumentException: Invalid data. Unsupported type: androidx.appcompat.widget.AppCompatEditText (found in field Email)
        at com.google.firebase.firestore.core.UserData$ParseContext.createError(com.google.firebase:firebase-firestore@@17.1.2:293)
        at com.google.firebase.firestore.UserDataConverter.parseScalarValue(com.google.firebase:firebase-firestore@@17.1.2:405)
        at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.2:254)
        at com.google.firebase.firestore.UserDataConverter.parseMap(com.google.firebase:firebase-firestore@@17.1.2:274)
        at com.google.firebase.firestore.UserDataConverter.parseData(com.google.firebase:firebase-firestore@@17.1.2:230)
        at com.google.firebase.firestore.UserDataConverter.parseSetData(com.google.firebase:firebase-firestore@@17.1.2:75)
        at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@17.1.2:172)
        at com.google.firebase.firestore.DocumentReference.set(com.google.firebase:firebase-firestore@@17.1.2:152)
        at com.example.poduszkowoapp.RegisterActivity$1$2.onComplete(RegisterActivity.java:90)
        at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
  

Код этого раздела в регистре активности, при котором возникают проблемы:

 fAuth.createUserWithEmailAndPassword(txtEmail.getText().toString(),txtPassword.getText().toString()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if(task.isSuccessful())
                            {
                                userID = fAuth.getCurrentUser().getUid();
                                Map<String, Object> userMap = new HashMap<>();
                                userMap.put("Name", txtName);
                                userMap.put("Surname", txtSurname);
                                userMap.put("Email", txtEmail);
                                fStore.collection("users").document(userID).set(userMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        Toast.makeText(RegisterActivity.this, "Registered succesfully", Toast.LENGTH_SHORT).show();
                                        startActivity(new Intent(getApplicationContext(), MainActivity.class));
                                        finish();
                                    }
                                });
                            }
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            if(e instanceof FirebaseAuthUserCollisionException)
                            {
                                Toast.makeText(RegisterActivity.this, "This email address is already taken", Toast.LENGTH_LONG).show();
                            }
                        }
                    });
  

Ответ №1:

Похоже, вы передаете экземпляры Android views в Firestore:

 Map<String, Object> userMap = new HashMap<>();
userMap.put("Name", txtName);
userMap.put("Surname", txtSurname);
userMap.put("Email", txtEmail);
  

Если txtEmail и другие являются объектами Android view, это вообще не сработает. Firestore ничего не знает о представлениях Android. Вам нужно написать код для извлечения строковых значений из виджетов и передачи этих строк в Firestore. Например, чтобы получить строку из EditText:

 userMap.put("Email", txtEmail.getText().toString());
  

Ответ №2:

Пусть ваша карта будет:

 Map<String, Object> userMap = new HashMap<>();
userMap.put("Name", txtName.getText().toString());
userMap.put("Surname", txtSurname.getText().toString());
userMap.put("Email", txtEmail.getText().toString());
  

Вы записывали свой тип EditText в firestore вместо текста из него.