【问题标题】:Firebase not storing data. Project build successfully with no error in LogcatFirebase 不存储数据。项目构建成功,在 Logcat 中没有错误
【发布时间】:2021-03-03 23:21:06
【问题描述】:

这是我创建的 registerUser 函数。如果你能看到那里我已经完成了将值存储到数据库中所需的一切 使用 setValue() 方法获取 firebase 数据库的引用和实例以及设置值并传递构造函数类 User 的用户对象。 我不知道我哪里做错了。请帮助这将是非常可观的。 这是我用于注册用户并存储到 Firebase 数据库的 Java 代码

private void registerUser()
{
        String Email=nEmail.getText().toString().trim();
        String password=npassword.getText().toString().trim();
        String Username=nFullName.getText().toString().trim();
        String Phone=nphone.getText().toString().trim();

        if(Username.isEmpty()) {
            nFullName.setError("Name is required");
            nFullName.requestFocus();
            return;
        }
        if(Email.isEmpty()) {
            nEmail.setError("Email is required");
            nEmail.requestFocus();
            return;
        }
        if(!Patterns.EMAIL_ADDRESS.matcher(Email).matches()){
            nEmail.setError("please provide valid email");
            nEmail.requestFocus();
            return;
        }
        if(password.isEmpty()) {
            npassword.setError("password is required");
            npassword.requestFocus();
            return;
        }


        if(password.length() < 6)
        {
            npassword.setError("password must be 6 chracters long");
            npassword.requestFocus();
            return;
        }

        if(Phone.isEmpty()) {
            nphone.setError("Phone is required");
            nphone.requestFocus();
            return;
        }

        progressBar.setVisibility(View.VISIBLE);
        mAuth.createUserWithEmailAndPassword(Email,password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful())
                {
                    String Email=nEmail.getText().toString().trim();
                    String Username=nFullName.getText().toString().trim();
                    String Phone=nphone.getText().toString().trim();

                    Users user=new Users(Username,Phone,Email);
                    FirebaseDatabase.getInstance().getReference("Users")
                            .child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if(task.isSuccessful()){
                                Toast.makeText(activity_register.this,"User Has been Successfully registered",Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);
                            }
                            else
                            {
                                Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);

                            }
                        }
                    });
                }


                else
                {
                    Toast.makeText(activity_register.this,"Failed..... :(",Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.GONE);
                }
            }
        });


    }
}

如果工作需要,还建议我任何依赖项。

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication android-manifest


    【解决方案1】:

    我认为您的问题的解决方案是以另一种方式使用 FirebaseDatabase。 Problem:您正在调用“getReference”方法并使用 String 值对其进行初始化:“Users”。

    代替:

    FirebaseDatabase.getInstance().getReference("Users")
                        .child(Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid()).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                    
    

    试试这个:

    FirebaseDatabase var1 = FirebaseDatabase.getInstance();
    DatabaseReference userRef = var1.getReference().child("Users");
    FirebaseAuth auth = FirebaseAuth.getInstance();  
    userRef = userRef.child(auth.getCurrentUser()).getUid());
    userRef.setValue("your string").addOnCompleteListener(new 
    OnCompleteListener<Void>() { 
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful())
            {System.out.print("Now it works!")
            }
        }
     });
    

    setValue 方法需要一个字符串值(通常)。

    请不要在 setValue 方法中放置像您的用户类这样的类。

    如果您想为一个用户保存多个 Data-String,您可以在用户根目录后面添加另一个 .child("DataStringName")。

    用户名和普通名称示例:

    FirebaseDatabase var1 = FirebaseDatabase.getInstance();
    DatabaseReference userRef = var1.getReference().child("Users");
    FirebaseAuth auth = FirebaseAuth.getInstance();  
    userRef = userRef.child(auth.getCurrentUser()).getUid());
    DatabaseReference usernameRef = userRef.child("username");
    DatabaseReference nameRef = userRef.child("name");
    usernameRef.setValue("Username").addOnCompleteListener(new 
    OnCompleteListener<Void>() { 
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
    if(task.isSuccessful())
    {System.out.print("Username is uploaded!")
    }
    }
    });
    nameRef.setValue("Name").addOnCompleteListener(new 
    OnCompleteListener<Void>() { 
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
    if(task.isSuccessful())
    {System.out.print("Name is uploaded!")
    }
    }
    });
    

    希望这个回答对你有帮助!

    最好的问候!

    【讨论】:

    • 但问题不在于第二个 task.isSuccessful() 。它在第一个 task.isSuccessful() 中创建 mAuth.createUserWithEmailAndPassword(Email,password) 的原因是没有完成
    • 好的,我会做出新的回答
    【解决方案2】:

    所以您创建帐户的代码是正确的。

    您应该注意以下几件事:

    1. 您是否在 Firebase 身份验证中启用了电子邮件/密码功能 (Firebase)

    2. 您是否按照 Android 的说明进行操作?

    请向我显示带有错误响应的日志,或任何 firebase 响应。我相信会有回应的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多