java - 将 arrayList<Class> 保存为 Room 内的字符串

标签 java arraylist android-sqlite android-room

我正在使用 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/

相关文章:

java - ClassNotFoundException : javax. xml.bind.JAXBException(再次)

java - 无法使用反射包将变量传递给私有(private)方法

android - 使用 ID 删除多行?

android - 将 ContentValues 重复用于多个 insert() 到表操作是否安全?

java - 在 SQLite 数据库中 insertWithOnConflict 在 Android 应用程序中不起作用

java - 我应该同时学习C++和Java吗?

javascript - 如何在java中读取用户证书

java - 如何通过数组的特定索引将数据添加到数组列表?

java - 错误 : java. util.Arrays$ArrayList 无法转换为 java.util.ArrayList

java - ArrayList对象插入排序