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