为什么在类型转换器的帮助下尝试在 Room 数据库中保存列表时出现错误?
Why am I getting an error when trying to save a list in Room database with the help of a type converter?
我想在 Room 数据库中存储一个整数类型的列表。为此,我写了一个看起来像这样的转换器:
public class TypeConverter {
static Gson gson = new Gson();
@androidx.room.TypeConverter
public static List<Integer> stringToIntegerList(String data) {
if (data == null) {
return Collections.emptyList();
}
Type listType = new TypeToken<List<Integer>>() {
}.getType();
return gson.fromJson(data, listType);
}
@androidx.room.TypeConverter
public static String someObjectListToString(List<Integer> someObjects) {
return gson.toJson(someObjects);
}
}
这是模型的一部分class:
@TypeConverters(TypeConverter.class)
List<Integer> colors_ids;
还有一个数据库class:
@Database(entities = {Flower.class}, version = 2)
@TypeConverters(TypeConverter.class)
当我获取列表时,出现错误:
Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
因此列表为空。我究竟做错了什么?感谢您的帮助。
编辑:
这是我将数组保存到 Room 数据库的方式:
dao.insert(new Flower(something, something, ..., new ArrayList<Integer>(){{add(R.drawable.flower_clove_red); add(R.drawable.flower_clove_pink);}}));
类型转换器class没问题。问题出在我填充数据库的方式上。
我想在 Room 数据库中存储一个整数类型的列表。为此,我写了一个看起来像这样的转换器:
public class TypeConverter {
static Gson gson = new Gson();
@androidx.room.TypeConverter
public static List<Integer> stringToIntegerList(String data) {
if (data == null) {
return Collections.emptyList();
}
Type listType = new TypeToken<List<Integer>>() {
}.getType();
return gson.fromJson(data, listType);
}
@androidx.room.TypeConverter
public static String someObjectListToString(List<Integer> someObjects) {
return gson.toJson(someObjects);
}
}
这是模型的一部分class:
@TypeConverters(TypeConverter.class)
List<Integer> colors_ids;
还有一个数据库class:
@Database(entities = {Flower.class}, version = 2)
@TypeConverters(TypeConverter.class)
当我获取列表时,出现错误:
Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
因此列表为空。我究竟做错了什么?感谢您的帮助。
编辑:
这是我将数组保存到 Room 数据库的方式:
dao.insert(new Flower(something, something, ..., new ArrayList<Integer>(){{add(R.drawable.flower_clove_red); add(R.drawable.flower_clove_pink);}}));
类型转换器class没问题。问题出在我填充数据库的方式上。