#java #arraylist #android-sqlite #android-room
#java #arraylist #android-sqlite #android-room
Вопрос:
Я использую библиотеку Room из jetpack и хочу сохранить свой ArrayList внутри базы данных Room.
Я использую TypeConverter для преобразования ArrayList в строку, но все еще получаю ошибку.
Error Message : Cannot figure out how to save this field into database. You can consider adding a type converter for it.
это мой преобразователь типов.
public class TypeConverterUtils {
@TypeConverter
public static String fromArray(ArrayList<CropData> arrayList) {
return GsonUtils.toGson(arrayList);
}
}
это мой класс базы данных.
@TypeConverters({TypeConverterUtils.class})
public abstract class CheruvuDatabase extends RoomDatabase {
private static final String DATABASE_NAME = "Cheruvu.db";
public abstract OtpDAO otpDAO();
public abstract FarmerInfoDAO farmerInfoDAO();
// For Singleton instantiation
private static final Object LOCK = new Object();
private static volatile CheruvuDatabase sInstance;
public static CheruvuDatabase getInstance(Context context) {
if (sInstance == null) {
synchronized (LOCK) {
if (sInstance == null) {
context.getApplicationContext().deleteDatabase(CheruvuDatabase.DATABASE_NAME);
sInstance = Room.databaseBuilder(context.getApplicationContext(), CheruvuDatabase.class, CheruvuDatabase.DATABASE_NAME)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build();
}
}
}
return sInstance;
}
}
Я хочу сохранить этот ArrayList.
private ArrayList cropData = новый ArrayList<>();
это мой класс CropData.
public class CropData {
private String cropName;
private Crop crop;
private Float cropAcres;
private Float cropYield;
private Float cropPrice;
public String getCropName() {
return cropName;
}
public void setCropName(String cropName) {
this.cropName = cropName;
}
public Crop getCrop() {
return crop;
}
public void setCrop(Crop crop) {
this.crop = crop;
}
public Float getCropAcres() {
return cropAcres;
}
public void setCropAcres(Float cropAcres) {
this.cropAcres = cropAcres;
}
public Float getCropYield() {
return cropYield;
}
public void setCropYield(Float cropYield) {
this.cropYield = cropYield;
}
public Float getCropPrice() {
return cropPrice;
}
public void setCropPrice(Float cropPrice) {
this.cropPrice = cropPrice;
}
}
Комментарии:
1. Если вы получаете сообщение об ошибке, вы должны включить сообщение об ошибке в свой вопрос
2. Добавлен @JoakimDanielson.
Ответ №1:
Добавили ли вы @Embedded в переменную ArrayList? потому что вам нужно будет внедрить класс, который вы хотите преобразовать.
например,
ArrayList<CropData> cropData;
и CropData.class отличается. так что просто добавьте
@Embedded
ArrayList<CropData> cropData;
и ваша проблема будет решена.