java - Android 房间数据库 : How to handle Arraylist in an Entity?

标签 java android android-room

我刚刚实现了 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 个字符串(截至目前)

提前致谢。

最佳答案

Type Converter是专门为此而制作的。在您的情况下,您可以使用下面给出的代码 fragment 将数据存储在数据库中。

public class Converters {
    @TypeConverter
    public static ArrayList<String> fromString(String value) {
        Type listType = new TypeToken<ArrayList<String>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }

    @TypeConverter
    public static String fromArrayList(ArrayList<String> list) {
        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
    }
}

并像这样在你的 Room DB 中提及这个类

@Database (entities = {MainActivityData.class},version = 1)
@TypeConverters({Converters.class})

更多信息 here

关于java - Android 房间数据库 : How to handle Arraylist in an Entity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44986626/

相关文章:

java - Tomcat REST API 路径大小

java - 如何获取多个可运行对象共有的变量的最小值?

kubernetes pod 内的 java 进程以 pid1 运行

android - 如何从获取 NPE 的 Android Activity 调用另一个 Activity AsyncTask 类

android - 如何返回到导航图的根?

Android Fragment 事务在后台

android - 使用 COUNT(*) AS 的 Room SQL 查询

JavaFx WebEngine - 用(本地)文件覆盖网站的样式表

android - 子类房间实体

android - 使用 Kotlin 协程时 Room dao 类出错