Android Room 数据库:如何处理实体中的 Arraylist? [英] Android Room Database: How to handle Arraylist in an Entity?

查看:64
本文介绍了Android Room 数据库:如何处理实体中的 Arraylist?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚实现了离线数据保存的 Room.但是在实体类中,我收到以下错误:

I just implemented Room for offline data saving. But in an Entity class, I am getting the following error:

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 保存数组吗?

So basically I want to save the ArrayList in the database but I was not able to find anything relevant to it. Can you guide me regarding how to save an Array using Room?

注意:MyListItems Pojo 类包含 2 个字符串(截至目前)

NOTE: MyListItems Pojo class contains 2 Strings (as of now)

提前致谢.

推荐答案

Option #1: Have MyListItems 是一个 @Entity, as MainActivityData> 是.MyListItems 会设置一个 @ForeignKey 回到 MainActivityData.但是,在这种情况下,MainActivityData 不能拥有 private ArrayList;myListItems 和 Room 一样,实体不引用其他实体.但是,视图模型或类似的 POJO 构造可能具有 MainActivityData 及其关联的 ArrayList.

Option #1: Have MyListItems be an @Entity, as MainActivityData is. MyListItems would set up a @ForeignKey back to MainActivityData. In this case, though, MainActivityData cannot have private ArrayList<MyListItems> myListItems, as in Room, entities do not refer to other entities. A view model or similar POJO construct could have a MainActivityData and its associated ArrayList<MyListItems>, though.

选项 #2:设置一对 @TypeConverter 方法来将 ArrayList 与某种基本类型(例如,String,例如使用 JSON 作为存储格式).现在,MainActivityData 可以直接拥有它的 ArrayList.但是,MyListItems 将没有单独的表,因此您无法很好地查询MyListItems.

Option #2: Set up a pair of @TypeConverter methods to convert ArrayList<MyListItems> to and from some basic type (e.g., a String, such as by using JSON as a storage format). Now, MainActivityData can have its ArrayList<MyListItems> directly. However, there will be no separate table for MyListItems, and so you cannot query on MyListItems very well.

这篇关于Android Room 数据库:如何处理实体中的 Arraylist?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆