【问题标题】:Array of custom objects in Room Database房间数据库中的自定义对象数组
【发布时间】:2018-03-10 09:10:36
【问题描述】:

我正在尝试为我的 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;
}

}

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: android database android-sqlite android-room custom-object


    【解决方案1】:

    删除自定义对象数组的 @Embedded 注释修复了该问题。

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2018-08-17
      相关资源
      最近更新 更多