我刚刚实现了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

10-08 17:33