android - 类型转换器不工作
问题描述
我的类型转换器有问题。我在我的字段中添加了注释 TypeConverters 但我仍然有错误,无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。我不知道为什么。
我的实体类
@Getter
@Setter
@Entity(tableName = "drinking")
public class Drinking {
@PrimaryKey(autoGenerate = true)
private int id;
String date;
int duration;
@TypeConverters(DrinkingTypeConverter.class)
List<AlcoholPageDTO> alcoholList = new ArrayList<>();
public Drinking(String date, int duration, List<AlcoholPageDTO> alcoholList) {
this.duration = duration;
this.date = date;
this.alcoholList.addAll(alcoholList);
}
}
AlcoholPageDTO 类
@AllArgsConstructor
@Getter
public class AlcoholPageDTO {
private Alcohol alcohol;
private int shots;
private float alcoholAmount;
List<Long> shootsTime;
}
转换器
public class DrinkingTypeConverter {
private static Gson gson = new Gson();
@TypeConverter
public static List<Drinking> stringToDrinkingList(String data) {
if (data == null) {
return Collections.emptyList();
}
Type listType = new TypeToken<List<Drinking>>() {}.getType();
return gson.fromJson(data, listType);
}
@TypeConverter
public static String drinkingListToString(List<Drinking> someObjects) {
return gson.toJson(someObjects);
}
}
数据库类
@Database(entities = {Alcohol.class, Drinking.class}, version = 2)
@TypeConverters({DrinkingTypeConverter.class})
public abstract class ShotCounterDatabase extends RoomDatabase {
public abstract AlcoholDao alcoholDao();
public abstract DrinkingDao drinkingDao();
private static ShotCounterDatabase INSTANCE;
public static ShotCounterDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (ShotCounterDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
ShotCounterDatabase.class, "Shot_Counter_Database")
.fallbackToDestructiveMigration()
.build();
}
}
}
return INSTANCE;
}
}
解决方案
将您的 @TypeConverters 放在您的班级名称之上。
这是因为您的类型转换器针对的是类列表Drinking
,而不是AlcoholPageDTO
.
@TypeConverters 的位置决定了类的哪个部分将接收该功能。例如。如果它在方法名称之上,则只有该方法会相应地转换为不同的类型。
在您的情况下,您应该将 TypeConverter 设置为List<AlcoholPageDTO>
to String
,反之亦然。然后它应该解决问题。
推荐阅读
- java - 获取 jsonObject 的不存在属性的最佳方法
- python - 上升 x - 作为自由变量 - 列表元素的幂
- python - 如何将 rcParam 设置保存到文件以在另一个脚本中使用它
- javascript - 将标头数据存储在 url
- java - 使用java将过滤器应用于excel
- powershell - 如何在使用 powershell 转换、调整大小和移动图像时保持文件夹结构
- javascript - FabricJS中暂停后如何恢复动画
- xcode - 在 Xcode Builder for tvOS 中改变深色界面的按钮标题颜色
- c++ - 不确定如何使用 duration_cast 作为宏函数
- python-3.x - print() 命令不包含所有预期值