【问题标题】:Java android room List in class Cannot figure out how to save this field into database类中的Java android房间列表无法弄清楚如何将此字段保存到数据库中
【发布时间】:2019-05-10 12:14:15
【问题描述】:

我无法在手机上安装应用程序,因为我看到了这个错误:

错误:无法弄清楚如何将此字段保存到数据库中。你可以 考虑为它添加一个类型转换器。

这是因为我在课堂上有这个:

@Entity(tableName = "last_state")
public class LastStateTable {

    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    long id;
    @ColumnInfo(name = "date")
    String date;
    List<Icon> icon;
    }

    @Entity(tableName = "icon" )
    public class Icon {
        @PrimaryKey(autoGenerate = false)
        @ColumnInfo(name = "id")
        int id;
        @ColumnInfo(name = "nr")
        int nr;
        @ColumnInfo(name = "type")
        int type;
        @ColumnInfo(name = "value")
        int value;
    }

它无法安装在设备上,因为我也应该在里面有一个列表?

我尝试这样做,但我有一些错误:

   public class Converters {
    @TypeConverter
    public static ArrayList<Icon> fromString(String value) {
        Type listType = new TypeToken<ArrayList<Icon>>() {}.getType();
        return new Gson().fromJson(value, listType);
    }

    @TypeConverter
    public static String fromArrayList(ArrayList<Icon> list) {
        Gson gson = new Gson();
        return gson.toJson(list);
    }
}

【问题讨论】:

标签: java android android-room


【解决方案1】:

您可以添加一个类型转换器来指导房间如何处理列表数据

类似的东西

/**
 * Type Converter to instruct Room how to serialize and deserialize List(s) of data
 */
public class ListConverter {

    private static Gson gson = new Gson();

    @TypeConverter
    public static List<Icon> stringToIconList(String data) {

        if (data == null) {
            return Collections.emptyList();
        }

        Type listType = new TypeToken<List<Icon>>() {}.getType();

        return gson.fromJson(data, listType);
    }


    @TypeConverter
    public static String iconListToString(List<Icon> list) {

        return gson.toJson(list);
    }
}

您还必须注释 Room 的图标列表字段,了解它是一个字段并知道要使用什么转换器

@Entity(tableName = "last_state")
public class LastStateTable {

    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    long id;
    @ColumnInfo(name = "date")
    String date;
    @TypeConverters(ListConverter.class) // This is missing in your code
    @ColumnInfo(name = "icons") // This is missing in your code
    List<Icon> icon;
}

@Entity(tableName = "icon" )
public class Icon {
    @PrimaryKey(autoGenerate = false)
    @ColumnInfo(name = "id")
    int id;
    @ColumnInfo(name = "nr")
    int nr;
    @ColumnInfo(name = "type")
    int type;
    @ColumnInfo(name = "value")
    int value;
}

错误应该消失了

希望对你有帮助

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2019-10-04
    • 2017-11-18
    相关资源
    最近更新 更多