我正在使用 jetpack 中的 Room 库,我想将 arrayList 保存在 Room 数据库中。
我正在使用 typeConverter 将 arrayList 转换为 String,但仍然出现错误。
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 = new 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;
}
}
最佳答案
您是否在 ArrayList 变量上添加了 @Embedded?因为您需要嵌入要转换的类。
例如,
ArrayList<CropData> cropData;
和CropData.class是不同的。所以只需添加
@Embedded
ArrayList<CropData> cropData;
你的问题将会得到解决。
关于java - 将 arrayList<Class> 保存为 Room 内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55546748/