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

从Firebase获取数据至RecyclerView时应用崩溃问题求助

解决Firebase笔记应用帖子页面崩溃、RecyclerView为空的问题

最近开发一款支持用户撰写笔记的应用时踩了个实打实的坑:明明已经把笔记成功存入Firebase了,结果打开帖子页面时应用直接崩溃,RecyclerView还显示为空。折腾了好半天试了各种方法都没搞定,最后终于找到根源,分享给大家避避坑。

我尝试过的无效解决方案

  • 将RecyclerView的高度设置为wrap_content
  • 在适配器中调用notifyDataSetChanged()强制刷新数据
  • 确保调用了FirebaseRecyclerAdapter的startListening()方法

问题根源与最终解决办法

反复排查后发现,问题出在Firebase存储的timestamp字段类型和Model类中的定义不匹配:我在数据库里存的timestamp是字符串格式,但Model类里把它定义成了long类型,Firebase在解析数据时无法将String转为long,直接引发崩溃,自然导致RecyclerView拿不到数据展示。

解决办法超简单:把Model类中的timestamp字段类型改成String,同时存入Firebase时也保持String格式,问题瞬间就解决了!

相关代码对比

有问题的Model类(导致崩溃)

public class Note {
    private String title;
    private long timestamp; // 类型与数据库存储格式不匹配

    // Firebase解析必需的空构造函数
    public Note() {}

    public Note(String title, long timestamp) {
        this.title = title;
        this.timestamp = timestamp;
    }

    // Getter和Setter方法
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public long getTimestamp() { return timestamp; }
    public void setTimestamp(long timestamp) { this.timestamp = timestamp; }
}

修改后的Model类(解决问题)

public class Note {
    private String title;
    private String timestamp; // 改为String类型,与数据库存储格式匹配

    public Note() {}

    public Note(String title, String timestamp) {
        this.title = title;
        this.timestamp = timestamp;
    }

    // Getter和Setter方法
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public String getTimestamp() { return timestamp; }
    public void setTimestamp(String timestamp) { this.timestamp = timestamp; }
}

对应的Logcat错误信息(供参考)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mynotesapp, PID: 8976
com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.String to long
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertLong(CustomClassMapper.java:445)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToPrimitive(CustomClassMapper.java:286)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:215)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:47:38