You need to enable JavaScript to run this app. Android Studio开发时Firebase数据库无法接收Android端上传数据求助
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio开发时Firebase数据库无法接收Android端上传数据求助

问题排查与解决方案

1. 核心代码逻辑错误

当前获取输入框内容的时机错误:在onCreate生命周期中直接读取EditText的内容,此时页面刚完成初始化,用户还未在输入框中填写任何内容,你拿到的始终是空字符串,就算后续用户输入了内容,点击按钮时用的还是之前读取的空值。
修复方案:把读取输入框内容的逻辑移到按钮点击事件内部,同时添加上传结果监听定位错误:

public class UsersDataBase extends AppCompatActivity {

    EditText EditTextBlue, EditTextRed, EditTextGreen;
    Button save;

    DatabaseReference databaseReference;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cadastrodeuser2);

        databaseReference = FirebaseDatabase.getInstance().getReference("users");

        EditTextBlue = findViewById(R.id.campoblue);
        EditTextRed = findViewById(R.id.campored);
        EditTextGreen = findViewById(R.id.campogreen);

        save = findViewById(R.id.save);

        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 点击按钮时再读取用户输入的内容
                String blue = EditTextBlue.getText().toString().trim();
                String red = EditTextRed.getText().toString().trim();
                String green = EditTextGreen.getText().toString().trim();
                // 非空校验避免空数据上传
                if(blue.isEmpty() || red.isEmpty() || green.isEmpty()){
                    Toast.makeText(UsersDataBase.this, "请填写完整内容", Toast.LENGTH_SHORT).show();
                    return;
                }
                String id = databaseReference.push().getKey();
                user2 user2 = new user2(blue, red, green);
                // 添加上传结果监听,可直接查看失败原因
                databaseReference.child(id).setValue(user2)
                    .addOnCompleteListener(task -> {
                        if(task.isSuccessful()){
                            Toast.makeText(UsersDataBase.this, "上传成功", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(UsersDataBase.this, "上传失败:"+task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                            Log.e("FirebaseUpload", "上传失败", task.getException());
                        }
                    });
            }
        });
    }
}

2. 其他可能的配置问题

  • 检查Firebase实时数据库的权限规则,测试阶段可以先将规则改为允许读写验证功能是否正常(上线前请修改为安全规则):
{
  "rules": {
    ".read": true,
    ".write": true
  }
}
  • 确认user2实体类符合Firebase序列化要求:包含公共无参构造方法、所有需要序列化的字段都有对应的getter方法,或是被public修饰。
  • 确认google-services.json文件已经正确放置在项目的app目录下,文件内的项目配置和Firebase控制台的配置完全一致。
  • 确认设备网络正常,你同时依赖了Firebase实时数据库和Firestore两个数据库服务,不要混淆两个服务的操作和控制台配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 12:48:01