ORMLite does not know how to store class java.util.ArrayList错误的解决

本文解决了一个使用ORMLite框架保存自定义类数据时遇到的问题,该类包含一个ArrayList类型的成员变量。通过设置dataType=DataType.SERIALIZABLE成功解决了无法存储的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序中要用开源库ORMLite保存一个自定义类的数据,其中这个自定义类有如下属性:

    @DatabaseField
    private String packageName;

    @DatabaseField
    private int id;

    @DatabaseField
    private int type;

    @DatabaseField
    private ArrayList<Feature> featureList;

这些属性都加上了ormLite的@DatabaseField标注。Feature也是一个自定义的类,实现了Serializable接口。

但是在运行后报了如下错误:

 E/DatabaseHelper: Unable to getDao
                      java.sql.SQLException: ORMLite does not know how to store class java.util.ArrayList for field 'featureList'.  Use another class, custom persister, or to serialize it use dataType=DataType.SERIALIZABLE
               at com.j256.ormlite.field.FieldType.<init>(FieldType.java:185)
               at com.j256.ormlite.table.DatabaseTableConfig.convertFieldConfigs(DatabaseTableConfig.java:236)
               at com.j256.ormlite.table.DatabaseTableConfig.extractFieldTypes(DatabaseTableConfig.java:101)
               at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:153)
               at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:128)
               at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:119)
               at com.j256.ormlite.dao.BaseDaoImpl$5.<init>(BaseDaoImpl.java:921)
               at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:921)
               at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:72)
               at com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper.getDao(OrmLiteSqliteOpenHelper.java:279)

从报错信息上看,ormLite不知道怎么存储这个ArrayList 类型的featureList对象。同时也给出了解决方案,即加上dataType=DataType.SERIALIZABLE。

那么怎么加上呢?查找文档,修改如下:

    @DatabaseField(dataType = DataType.SERIALIZABLE)
    private ArrayList<Feature> featureList;

问题就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值