房间持久性库 - 带列表的嵌套对象 ,@ Embedded不起作用。

问题描述 投票:3回答:2

我有一个VideoList对象,我想使用房间库保存,但当我尝试使用@Embedded与公共List list = null;它给了我以下错误:错误:(23,24)错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。

VideoList类如下。

@Entity
public class VideoList {


@PrimaryKey
public String id;

public String title;
public String viewType;
public Integer sortingOrder = null;
public String componentSlug;
public String endPoint = null;

@Embedded
public List<Video> list = null;
public boolean hidden = false; }




Any suggestions? 
java android database sqlite android-database
2个回答
1
投票

我认为Convertor是这种嵌套列表对象的最佳解决方案。

public class Converter {

public static String strSeparator = "__,__";

@TypeConverter
public static String convertListToString(List<Video> video) {
    Video[] videoArray = new Video[video.size()];
    for (int i = 0; i <= video.size()-1; i++) {
         videoArray[i] = video.get(i);
    }
    String str = "";
    Gson gson = new Gson();
    for (int i = 0; i < videoArray.length; i++) {
        String jsonString = gson.toJson(videoArray[i]);
        str = str + jsonString;
        if (i < videoArray.length - 1) {
            str = str + strSeparator;
        }
    }
    return str;
}

@TypeConverter
public static List<Video> convertStringToList(String videoString) {
    String[] videoArray = videoString.split(strSeparator);
    List<Video> videos = new ArrayList<Video>();
    Gson gson = new Gson();
    for (int i=0;i<videoArray.length-1;i++){
        videos.add(gson.fromJson(videoArray[i] , Video.class));
    }
    return videos;
}

}


0
投票

大多数时候你不能使用转换器来生成String,因为它们是复杂的对象!

不重复答案,在另一个相同的问题,你可以阅读我的answer

© www.soinside.com 2019 - 2024. All rights reserved.