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

无法在EditText中展示Firebase数据库数据,代码仅返回图片链接求助

解决Firebase数据无法正确显示在EditText的问题

你的问题出在所有字段都直接调用了snapshot.getValue().toString(),这会把整个Business节点的所有数据转换成一个完整的字符串(类似键值对集合的格式),而不是获取每个单独的字段内容。结合你的数据库结构,给你两种修复方案:

方案一:直接获取每个子节点的值

针对数据库里的每个字段,通过snapshot.child("字段名").getValue(String.class)单独取值:

reference.child("Businesses").child(firebaseUser.getUid()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        if (snapshot.exists()) {
            // 逐个获取对应子节点的字符串值
            String businessName = snapshot.child("businessName").getValue(String.class);
            editTextBusinessName.setText(businessName);

            String businessAbout = snapshot.child("businessAbout").getValue(String.class);
            editTextAbout.setText(businessAbout);

            String businessAddress = snapshot.child("businessAddress").getValue(String.class);
            editTextAddress.setText(businessAddress);

            String businessContactPerson = snapshot.child("businessContactPerson").getValue(String.class);
            editTextContactPerson.setText(businessContactPerson);

            String businessContactNumber = snapshot.child("businessContactNumber").getValue(String.class);
            editTextContactNumber.setText(businessContactNumber);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        // 处理取消监听的异常情况
        Log.e("FirebaseError", error.getMessage());
    }
});

方案二:使用实体类解析(更规范)

创建一个和数据库字段对应的实体类,直接将节点数据解析为对象,代码更简洁易维护:

1. 定义Business实体类

public class Business {
    private String businessName;
    private String businessAbout;
    private String businessAddress;
    private String businessContactPerson;
    private String businessContactNumber;

    // 必须保留无参构造函数,Firebase解析数据需要它
    public Business() {}

    // 带参构造函数(可选,用于主动创建对象)
    public Business(String businessName, String businessAbout, String businessAddress, String businessContactPerson, String businessContactNumber) {
        this.businessName = businessName;
        this.businessAbout = businessAbout;
        this.businessAddress = businessAddress;
        this.businessContactPerson = businessContactPerson;
        this.businessContactNumber = businessContactNumber;
    }

    // 所有字段的getter方法,Firebase通过getter读取属性
    public String getBusinessName() {
        return businessName;
    }

    public void setBusinessName(String businessName) {
        this.businessName = businessName;
    }

    public String getBusinessAbout() {
        return businessAbout;
    }

    public void setBusinessAbout(String businessAbout) {
        this.businessAbout = businessAbout;
    }

    public String getBusinessAddress() {
        return businessAddress;
    }

    public void setBusinessAddress(String businessAddress) {
        this.businessAddress = businessAddress;
    }

    public String getBusinessContactPerson() {
        return businessContactPerson;
    }

    public void setBusinessContactPerson(String businessContactPerson) {
        this.businessContactPerson = businessContactPerson;
    }

    public String getBusinessContactNumber() {
        return businessContactNumber;
    }

    public void setBusinessContactNumber(String businessContactNumber) {
        this.businessContactNumber = businessContactNumber;
    }
}

2. 修改监听代码

reference.child("Businesses").child(firebaseUser.getUid()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        if (snapshot.exists()) {
            // 将节点数据直接解析为Business对象
            Business business = snapshot.getValue(Business.class);
            if (business != null) {
                editTextBusinessName.setText(business.getBusinessName());
                editTextAbout.setText(business.getBusinessAbout());
                editTextAddress.setText(business.getBusinessAddress());
                editTextContactPerson.setText(business.getBusinessContactPerson());
                editTextContactNumber.setText(business.getBusinessContactNumber());
            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        Log.e("FirebaseError", error.getMessage());
    }
});

注意:两种方案都要确保数据库里的字段名和代码中引用的名称完全一致(大小写也要匹配),否则会获取到null值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:30:31