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

Android应用无法打开自行存入Room Database的非txt文件问题排查

问题根因
  • Files实体类的fileData字段配置错误,你将该字段的typeAffinity设置为ColumnInfo.TEXT,但二进制字节数组在SQLite中需要用BLOB类型存储。TEXT类型会强制将二进制数据按文本编码规则解析,非文本类的二进制文件(图片、音视频、文档等)会在这个过程中出现字节丢失、篡改,只有纯文本的.txt文件不会受编码转换影响,所以只有txt文件可以正常打开。
  • 你额外添加的FileTypeConverter类型转换器存在问题,Room本身原生支持byte[]类型字段直接映射到SQLite的BLOB类型,不需要额外做类型转换。你的转换器大概率实现了byte[]和String的互转逻辑,这个转换会破坏非文本文件的二进制结构。
修复步骤
  1. 修改Files实体类的fileData字段配置,删除@TypeConverters注解,将typeAffinity改为ColumnInfo.BLOB:
// 调整后的fileData字段配置
@ColumnInfo(name = "FileData", typeAffinity = ColumnInfo.BLOB)
private byte[] fileData;
  1. 删除自定义的FileTypeConverter类,避免不必要的类型转换干扰。
  2. 可选优化:在读取文件转字节数组的逻辑中,补充ByteArrayOutputStream的关闭调用,符合编码规范。
  3. 重新测试插入非文本文件,即可正常读取打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:04