Android中Firebase数据库节点内写入ArrayList问题求助
解决Firebase中Article类的motcle数组未显示问题
我来帮你捋捋这个问题哈!你说Article类里的motcle数组明明不为空,但就是没出现在Firebase数据库里,大概率是没满足Firebase的对象序列化规则,咱们一步步排查解决:
1. 先检查Article类的基础配置
Firebase Realtime Database在序列化Java对象时,有两个硬性要求:
- 必须有无参构造器:哪怕是空的也要写,Firebase反序列化对象时会调用它,没有的话可能导致字段丢失甚至写入失败。
- 字段要能被访问:要么把字段设为
public,要么给private字段添加对应的getter方法(比如getMotcle()),不然Firebase读不到这个字段。
给你一个符合要求的Article类示例:
public class Article { // 必须要有这个无参构造器! public Article() {} // 如果你不想把字段设为public,就保留private并添加getter public String titre; public ArrayList<String> motcle; // 带参构造器是可选的,方便你创建实例 public Article(String titre, ArrayList<String> motcle) { this.titre = titre; this.motcle = motcle; } // 如果字段是private,一定要加下面的getter // public String getTitre() { // return titre; // } // public ArrayList<String> getMotcle() { // return motcle; // } }
2. 确认数据写入的逻辑是否正确
看你提供的方法片段,要确保你是把完整的Article对象(包含titre和motcle)装进ArrayList,再写入数据库,而不是误传了其他数据。比如正确的写入逻辑应该是这样:
public void addArticleDesire(final ArrayList<Article> articleDesireList, String userId) { mDatabase = FirebaseDatabase.getInstance().getReference("User"); DatabaseReference userRef = mDatabase.child(userId); // 把包含完整Article对象的列表写入到ArticleDesire节点 userRef.child("ArticleDesire").setValue(articleDesireList) .addOnSuccessListener(unused -> { // 这里可以加写入成功的提示逻辑 }) .addOnFailureListener(e -> { // 处理写入失败的情况,比如打印错误信息 e.printStackTrace(); }); }
3. 检查motcle的泛型是否明确
Firebase对泛型的支持需要具体类型,如果你在Article类里把motcle定义成了raw type的ArrayList(没写<String>),可能会导致序列化异常,数组内容无法被识别。一定要明确写成ArrayList<String>(或者你实际存储的类型)。
按照这几步排查下来,应该就能解决motcle数组在数据库中不显示的问题啦!
内容的提问来源于stack exchange,提问作者Anis Kaloun
相关产品推荐
相关产品推荐

