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

setValue()在Model Activity中不生效,FirebaseDatabase无法写入数据问题

问题排查与解决步骤

    1. 修正存储类型错误:你当前直接将Uri对象传入ProductDetails实体类存入数据库,Firebase Realtime Database不支持直接序列化Uri类型,需要将其转为字符串格式:
      把构造ProductDetails的代码改为:
    ProductDetails info = new ProductDetails(brand, name, categories, quantity, price, description, uri.toString(), RandomUID, BusinessId);
    
    同步修改ProductDetails类中对应图片地址字段的类型为String,并提供对应的get、set方法。
    1. 补全数据库写入的错误日志:你目前仅监听了setValue的onComplete回调,无法感知写入失败的原因,添加错误监听打印详细报错:
    firebaseDatabase.getInstance().getReference("ProductDetails")
            .child(RandomUID)
            .setValue(info)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    progressDialog.dismiss();
                    if(task.isSuccessful()){
                        Toast.makeText(UploadAProduct.this,"Έτοιμή για σαλπάρισμα!",Toast.LENGTH_SHORT).show();
                    }else{
                        // 打印错误信息排查问题
                        Log.e("写入失败", task.getException().getMessage());
                        Toast.makeText(UploadAProduct.this,"写入失败:"+task.getException().getMessage(),Toast.LENGTH_SHORT).show();
                    }
                }
            });
    
    1. 修正FirebaseDatabase的调用方式:检查你的firebaseDatabase变量声明,getInstance()是FirebaseDatabase类的静态方法,应该用类名直接调用,而非实例变量调用,避免空指针或者实例错误:
      将所有firebaseDatabase.getInstance()改为FirebaseDatabase.getInstance()(首字母大写,对应类名)。
    1. 检查实体类规范:确保ProductDetails类包含无参构造函数,所有需要序列化的字段都有public的getter方法,不要添加无关的序列化注解(除非明确配置)。
    1. 检查混淆配置:如果你的项目开启了代码混淆,确保已经添加Firebase Realtime Database的混淆规则,避免实体类被混淆后无法正常序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:00