我刚刚实现了 Room 用于离线数据保存。但是在实体类中,我收到以下错误:
Error:(27, 30) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
课程如下:
@Entity(tableName = "firstPageData")
public class MainActivityData {
@PrimaryKey
private String userId;
@ColumnInfo(name = "item1_id")
private String itemOneId;
@ColumnInfo(name = "item2_id")
private String itemTwoId;
// THIS IS CAUSING THE ERROR... BASICALLY IT ISN'T READING ARRAYS
@ColumnInfo(name = "mylist_array")
private ArrayList<MyListItems> myListItems;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public ArrayList<MyListItems> getMyListItems() {
return myListItems;
}
public void setCheckListItems(ArrayList<MyListItems> myListItems) {
this.myListItems = myListItems;
}
}
所以基本上我想将 ArrayList 保存在数据库中,但我找不到任何相关的东西。你能指导我如何使用 Room 保存阵列吗?
注意:MyListItems Pojo 类包含 2 个字符串(截至目前)
提前致谢。
原文由 Tushar Gogna 发布,翻译遵循 CC BY-SA 4.0 许可协议
选项 #1:
MyListItems
成为@Entity
,就像MainActivityData
一样。MyListItems
将设置一个@ForeignKey
返回到MainActivityData
。但是,在这种情况下,MainActivityData
不能有private ArrayList<MyListItems> myListItems
,就像在 Room 中一样,实体不引用其他实体。但是,视图模型或类似的 POJO 构造可能具有MainActivityData
及其关联的ArrayList<MyListItems>
。选项 #2:设置一对
@TypeConverter
方法将ArrayList<MyListItems>
转换为一些基本类型(例如,一个String
,例如使用 JSON一种存储格式)。现在,MainActivityData
可以直接拥有它的ArrayList<MyListItems>
。但是,MyListItems
不会有单独的表,因此您不能很好地查询MyListItems
。