You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Firebase实时数据库无法写入数据求助

Firebase实时数据库无数据写入问题排查

我用Firebase在Android Studio开发登录注册页面,代码编译正常,但实时数据库里看不到任何数据。已经按Firebase文档完成所有配置,应用也成功连接Firebase(依赖和插件都已添加)。作为新手,求指导。


登录Activity代码

public class MainActivity extends AppCompatActivity {

    TextView signuptext;
    Button loginbtn;

    TextInputLayout username_var, password_var;

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

        loginbtn = findViewById(R.id.loginbutton);
        password_var = findViewById(R.id.passwordtext_field_design);
        username_var = findViewById(R.id.emailtext_field_design);
        signuptext = findViewById(R.id.createaccount);

        ProgressDialog progressDialog = new ProgressDialog(this);

        signuptext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), SignUp.class);
                startActivity(intent);
                finish();
            }
        });

        loginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),0);

                String password_ = password_var.getEditText().getText().toString().trim();
                String username_ = username_var.getEditText().getText().toString().trim();

                progressDialog.setTitle("Login");
                progressDialog.setMessage("In Progess...please wait");
                progressDialog.show();

                if (!username_.isEmpty()){
                    username_var.setError(null);
                    username_var.setErrorEnabled(false);
                    if (!password_.isEmpty()) {
                        password_var.setError(null);
                        password_var.setErrorEnabled(false);

                        final String username_data = username_var.getEditText().getText().toString().trim();
                        final String password_data = password_var.getEditText().getText().toString().trim();

                        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
                        DatabaseReference databaseReference = firebaseDatabase.getReference("datauser");

                        Query check_username = databaseReference.orderByChild("username").equalTo(username_data);

                        check_username.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if(snapshot.exists()){
                                    username_var.setError(null);
                                    username_var.setErrorEnabled(false);
                                    String passwordcheck = snapshot.child(username_data).child("password").getValue(String.class);
                                    if(passwordcheck.equals(password_data)){
                                        password_var.setError(null);
                                        password_var.setErrorEnabled(false);

                                        Toast.makeText(MainActivity.this,"Register Successfully", Toast.LENGTH_SHORT).show();
                                        progressDialog.show();

                                        Intent intent = new Intent(getApplicationContext(),Final.class);
                                        startActivity(intent);
                                        finish();
                                    }
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError error) {

                            }
                        });
                    }else{
                        username_var.setError("Email is not Registered");
                    }
                }else{
                    password_var.setError("Wrong Password");
                }
            }
        });
    }
}

注册Activity代码

public class SignUp extends AppCompatActivity {

    TextView logintext;

    TextInputLayout fullname_var, username_var, email_var, phonenumber_var, password_var;

    FirebaseDatabase firebaseDatabase;
    DatabaseReference reference;

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

        fullname_var = findViewById(R.id.fullname_field);
        username_var = findViewById(R.id.username_field);
        email_var = findViewById(R.id.email_field);
        phonenumber_var = findViewById(R.id.phoneno_field);
        password_var = findViewById(R.id.password_field);
        logintext = findViewById(R.id.Signintext);

        logintext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }

    public void registerbuttonclick(View view) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), 0);

        String fullname_ = fullname_var.getEditText().getText().toString().trim();
        String username_ = username_var.getEditText().getText().toString().trim();
        String email_ = email_var.getEditText().getText().toString().trim();
        String phonenumber_ = phonenumber_var.getEditText().getText().toString().trim();
        String password_ = password_var.getEditText().getText().toString().trim();

        if (!fullname_.isEmpty()) {
            fullname_var.setError(null);
            fullname_var.setErrorEnabled(false);
            if (!username_.isEmpty()) {
                username_var.setError(null);
                username_var.setErrorEnabled(false);
                if (!email_.isEmpty()) {
                    email_var.setError(null);
                    email_var.setErrorEnabled(false);
                    if (!phonenumber_.isEmpty()) {
                        phonenumber_var.setError(null);
                        phonenumber_var.setErrorEnabled(false);
                        if (!password_.isEmpty()) {
                            password_var.setError(null);
                            password_var.setErrorEnabled(false);
                            if (!email_.matches("/^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/")) {

                                FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
                                DatabaseReference reference = firebaseDatabase.getReference("datauser");

                                String fullname_s = fullname_var.getEditText().getText().toString().trim();
                                String email_s = email_var.getEditText().getText().toString().trim();
                                String phonenumber_s = phonenumber_var.getEditText().getText().toString().trim();
                                String password_s = password_var.getEditText().getText().toString().trim();
                                String username_s = username_var.getEditText().getText().toString().trim();

                                Datastorage storingdata = new Datastorage(fullname_s, username_s, email_s, password_s, phonenumber_s);
                                reference.child(username_s).setValue(storingdata);

                                Toast.makeText(this, "Register Successfully", Toast.LENGTH_SHORT).show();

                                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                startActivity(intent);
                                finish();
                            } else {
                                email_var.setError("Invalid Email");
                            }
                        } else {
                            password_var.setError("Please enter the Password");
                        }
                    } else {
                        phonenumber_var.setError("Please enter the Phone Number");
                    }
                } else {
                    fullname_var.setError("Please enter the Name");
                }
            }
        }
    }
}

数据模型类代码

public class Datastorage {
    private String name;
    private String username;
    private String email;
    private String phoneno;
    private String password;

    public Datastorage() {

    }

    public Datastorage(String name,String username, String email, String phoneno, String password){
        this.name =name;
        this.email =email;
        this.phoneno =phoneno;
        this.password =password;
        this.username =username;
    }

    public String getName() {
        return name;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

    public String getPhoneno() {
        return phoneno;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUsername(String password) {
        this.password = password;
    }

    public void setPhoneno(String phoneno) {
        this.phoneno = phoneno;
    }
}

Logcat截图

Logcat截图


问题排查与修复步骤

  1. 邮箱验证逻辑完全倒置
    注册代码中,邮箱格式判断条件写反了:原代码是邮箱格式不符合时才写入数据,正确逻辑应为邮箱格式匹配时执行写入。同时Java的matches方法不需要加前后斜杠/(这是JavaScript写法),修正后代码:
if (email_.matches("^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$")) {
    // 写入数据库逻辑
}
  1. 数据模型类setUsername方法错误
    模型类中setUsername方法把参数错误赋值给password变量,导致username字段无法正确存储,修正:
public void setUsername(String username) {
    this.username = username;
}
  1. 数据库权限配置检查
    默认Firebase实时数据库规则仅允许认证用户读写,测试阶段可临时开放权限(上线前必须改回安全规则):
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
  1. 注册空判断分支提示错误
    邮箱为空的else分支错误提示"请输入姓名",应改为提示邮箱为空:
} else {
    email_var.setError("Please enter the Email");
}
  1. 登录错误提示逻辑混乱
    登录时空判断的错误提示完全不对应场景,修正:
if (!username_.isEmpty()){
    username_var.setError(null);
    username_var.setErrorEnabled(false);
    if (!password_.isEmpty()) {
        // 登录逻辑
    } else {
        password_var.setError("请输入密码");
    }
} else {
    username_var.setError("请输入用户名/邮箱");
}

内容的提问来源于stack exchange,提问作者UncannyHarmony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:59:56