无法在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
相关产品推荐
相关产品推荐

