Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t将数据写入数据库firebase firestore_Android_Google Cloud Firestore - Fatal编程技术网

Android Can';t将数据写入数据库firebase firestore

Android Can';t将数据写入数据库firebase firestore,android,google-cloud-firestore,Android,Google Cloud Firestore,我设法将数据插入身份验证,但无法插入数据库: 代码: fullname = findViewById(R.id.Ifullname); password = findViewById(R.id.Ipassword); email = findViewById(R.id.Iemail); RegisterBtn = findViewById(R.id.button); fAuth = FirebaseAuth.getInstance(

我设法将数据插入身份验证,但无法插入数据库:

代码

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());

                                }
                            });
fullname=findviewbyd(R.id.Ifullname);
密码=findviewbyd(R.id.Ipassword);
email=findviewbyd(R.id.Iemail);
RegisterBtn=findviewbyd(R.id.button);
fAuth=FirebaseAuth.getInstance();
fStore=FirebaseFirestore.getInstance();
loginBtn=findviewbyd(R.id.loginBtn);
RegisterBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串FullName=FullName.getText().toString().trim();
字符串密码=Password.getText().toString().trim();
字符串Email=Email.getText().toString().trim();
fAuth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Toast.makeText(Register.this,“用户创建的”,Toast.LENGTH_SHORT.show();
UserID=fAuth.getCurrentUser().getUid();
DocumentReference=fStore.collection(“用户”).document(UserID);
Map user=newhashmap();
user.put(“FName”,全名);
user.put(“Email”,Email);
user.put(“密码”,Password);
//问题似乎是这条线
documentReference.set(user.addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“onSuccess:user Profile已创建”);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记“onFailure:+e.toString());
}
});
错误

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:致命异常:主进程: com.example.budgetingapp,PID:11507 java.lang.RuntimeException:找到 类上名称getText的getter冲突 androidx.appcompat.widget.AppCompatedText位于 com.google.firebase.firestore.util.CustomClassMapper$BeanMapper.(com.google.firebase:firebase-firestore@@21.4.1:629) 位于com.google.firebase.firestore.util.CustomClassMapper.loadOrCreateBeanMapperForClass(com.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) 在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(Register.java:95) 访问com.google.android.gms.tasks.zzj.run(未知来源:4) 位于android.os.Handler.handleCallback(Handler.java:873) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(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)


简而言之,您正在尝试将文本字段本身添加到数据库中,而不是添加您创建的字符串

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);

我建议采用一些命名约定来防止这种情况。我个人建议使用
camelCase
编写

Button     #button   -> #btnRegister
Button     #LoginBtn -> #btnLogin
TextField  #fullname -> #txtFullName
TextField  #email    -> #txtEmail
TextField  #password -> #txtPwd
有时,区分私有对象级变量和局部变量也很有用,通常在名称开头添加
m
(对于my):

mBtnRegister.setOnClickListener(...);
Button btnScripted = new Button(...);
您应该在
camelCase
(或
UPPER\u SNAKE\u CASE
中命名变量,而不是在
PascalCase
中命名变量,这样它们就不会被错误地识别为类、接口等。通过查看StackOverflow代码块的语法突出显示,您实际上可以看到这一点



那么我应该如何存储密码?仅在身份验证中而不是在用户数据库中?Firebase身份验证将安全地散列,然后为您存储密码散列。密码永远不应该存储在数据库中。在您代表用户登录服务的情况下,您应该使用OAuth或其他形式的访问令牌。但我确实检索了textview的id并输入了“全名”.那么,在我的情况下,你的txtFullName是我的全名。或者我理解错了吗?换句话说,如果我想更改密码,我仍然可以检索我的密码,而不需要手动存储密码?更改密码时,你必须在过去几分钟内重新登录,然后你可以调用