У меня проблема с конвертером типов. Я добавил аннотацию 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;
}
}