房间数据库中的自定义对象数组
Array of custom objects in Room Database
我正在尝试为我的 Android 应用程序创建一个 Room 数据库,但我 运行 遇到了自定义对象数组的问题。
错误信息:
java.lang.IllegalArgumentException: cz.polreich.banks.model.airBank.OpeningHoursDay[]cannot be converted to an Element
这是嵌入有问题数组的对象:
@Entity
public class OpeningHours {
@PrimaryKey(autoGenerate = true)
private int ohId;
private boolean isNonstop;
@Embedded
private OpeningHoursDay[] days;
public OpeningHours() {
}
// getters and setters
这是我的数据库定义:
@Database(version = 1, entities = {OpeningHours.class, OpeningHoursDay.class})
abstract class AppDatabase extends RoomDatabase {
@TypeConverters({Converters.class})
abstract public BranchDao branchDao();
}
我也有我希望的类型转换器,应该通过将数组转换为 List 并返回来解决这个问题,但它没有帮助:
public class Converters {
@TypeConverter
public List<OpeningHoursDay> fromOpeningHoursDayArray(OpeningHoursDay[] ohda){
List<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList.addAll(Arrays.asList(ohda));
return ohdList;
}
@TypeConverter
public OpeningHoursDay[] toOpeningHoursDayArray(List<OpeningHoursDay> ohdList){
OpeningHoursDay[] ohda = null;
for (int i = 0; i < ohdList.size(); i++) {
ohda[i] = ohdList.get(i);
}
return ohda;
}
}
编辑:
我试图更改 TypeConverter 以将对象转换为 json,但没有帮助:
public class Converters {
Gson gson = new Gson();
@TypeConverter
public String fromOpeningHoursDayArray(OpeningHoursDay[] ohda){
ArrayList<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList.addAll(Arrays.asList(ohda));
return gson.toJson(ohdList);
}
@TypeConverter
public OpeningHoursDay[] toOpeningHoursDayArray(String ohdJson){
ArrayList<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList = gson.fromJson(ohdJson, new TypeToken<ArrayList<OpeningHoursDay>>(){}.getType());
OpeningHoursDay[] ohda = null;
for (int i = 0; i < ohdList.size(); i++) {
ohda[i] = ohdList.get(i);
}
return ohda;
}
}
有人知道如何解决这个问题吗?
删除自定义对象数组的 @Embedded
注释解决了这个问题。
我正在尝试为我的 Android 应用程序创建一个 Room 数据库,但我 运行 遇到了自定义对象数组的问题。
错误信息:
java.lang.IllegalArgumentException: cz.polreich.banks.model.airBank.OpeningHoursDay[]cannot be converted to an Element
这是嵌入有问题数组的对象:
@Entity
public class OpeningHours {
@PrimaryKey(autoGenerate = true)
private int ohId;
private boolean isNonstop;
@Embedded
private OpeningHoursDay[] days;
public OpeningHours() {
}
// getters and setters
这是我的数据库定义:
@Database(version = 1, entities = {OpeningHours.class, OpeningHoursDay.class})
abstract class AppDatabase extends RoomDatabase {
@TypeConverters({Converters.class})
abstract public BranchDao branchDao();
}
我也有我希望的类型转换器,应该通过将数组转换为 List 并返回来解决这个问题,但它没有帮助:
public class Converters {
@TypeConverter
public List<OpeningHoursDay> fromOpeningHoursDayArray(OpeningHoursDay[] ohda){
List<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList.addAll(Arrays.asList(ohda));
return ohdList;
}
@TypeConverter
public OpeningHoursDay[] toOpeningHoursDayArray(List<OpeningHoursDay> ohdList){
OpeningHoursDay[] ohda = null;
for (int i = 0; i < ohdList.size(); i++) {
ohda[i] = ohdList.get(i);
}
return ohda;
}
}
编辑: 我试图更改 TypeConverter 以将对象转换为 json,但没有帮助:
public class Converters {
Gson gson = new Gson();
@TypeConverter
public String fromOpeningHoursDayArray(OpeningHoursDay[] ohda){
ArrayList<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList.addAll(Arrays.asList(ohda));
return gson.toJson(ohdList);
}
@TypeConverter
public OpeningHoursDay[] toOpeningHoursDayArray(String ohdJson){
ArrayList<OpeningHoursDay> ohdList = new ArrayList<>();
ohdList = gson.fromJson(ohdJson, new TypeToken<ArrayList<OpeningHoursDay>>(){}.getType());
OpeningHoursDay[] ohda = null;
for (int i = 0; i < ohdList.size(); i++) {
ohda[i] = ohdList.get(i);
}
return ohda;
}
}
有人知道如何解决这个问题吗?
删除自定义对象数组的 @Embedded
注释解决了这个问题。