android - 类型转换器不工作

标签 android database typeconverter

我的类型转换器有问题。我在我的字段中添加了注释 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 的位置决定了类的哪一部分将接收功能。 例如。如果它在方法名称之上,则只有该方法会相应地转换为不同的类型。

在您的情况下,您应该从 List<AlcoholPageDTO> 创建 TypeConverter至 String反之亦然。那么它应该可以解决问题。

关于android - 类型转换器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238339/

相关文章:

c# - 快速找到最近浮点值的数据结构

mysql - 查询中的 JOINS 最终显示太多行

wpf - 使用属性面板中的 TypeConverter 设置类类型的属性会生成扩展的 XAML,而不是字符串

java - 为微调器中的字符串数组项分配值

Android 刷新 fragment 内的 ViewPager

android - SetContentView 不显示屏幕(还)?

android - 我想通过给定时间限制来更新来自服务器的数据

android - Chromium webview 似乎不适用于 Android applyOverrideConfiguration

c++ - 将字符串转换为 TDateTime 变量

asp.net-core-webapi - 如何在 ASP.NET Core 6 中使用 DateOnly/TimeOnly 查询参数?