我刚刚实现了Room来保存离线数据。但是在Entity类中,出现以下错误:
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个字符串(到目前为止)
提前致谢。
最佳答案
选项1:将MyListItems
设为@Entity
,就像MainActivityData
一样。 MyListItems
会将@ForeignKey
设置回MainActivityData
。但是,在这种情况下,MainActivityData
不能具有private ArrayList<MyListItems> myListItems
,因为在Room中,实体不会引用其他实体。但是, View 模型或类似的POJO构造可以具有MainActivityData
及其关联的ArrayList<MyListItems>
。
选项#2:设置一对@TypeConverter
方法,以将ArrayList<MyListItems>
与某种基本类型(例如String
进行转换,例如使用JSON作为存储格式)。现在,MainActivityData
可以直接拥有其ArrayList<MyListItems>
。但是,没有单独的表MyListItems
,因此您不能很好地查询MyListItems
。