问题描述
我刚刚实施了Room以进行离线数据保存。但是在Entity类中,我收到以下错误:
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)
提前致谢。
推荐答案
选项#1: MyListItems
是 @Entity
,因为 MainActivityData
是。 MyListItems
会将 @ForeignKey
设置回 MainActivityData
。但是,在这种情况下, MainActivityData
不能有 private ArrayList< MyListItems> myListItems
,如在Room中,实体不引用其他实体。但是,视图模型或类似的POJO构造可以具有 MainActivityData
及其关联的 ArrayList< MyListItems>
。
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< MyListItems>
来往于某些基本类型(例如, String
,例如使用JSON作为存储格式)。现在, MainActivityData
可以直接使用 ArrayList< MyListItems>
。但是, 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会议室数据库:如何处理实体中的Arraylist?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!