Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打字机不工作_Android_Database_Typeconverter - Fatal编程技术网

Android 打字机不工作

Android 打字机不工作,android,database,typeconverter,Android,Database,Typeconverter,我的类型转换器有问题。我在我的字段中添加了注释类型转换器,但仍然存在错误,无法确定如何将该字段保存到数据库中。可以考虑为其添加类型转换器。我不知道为什么 我的实体类 @Getter @Setter @Entity(tableName = "drinking") public class Drinking { @PrimaryKey(autoGenerate = true) private int id; String date; int duration;

我的类型转换器有问题。我在我的字段中添加了注释类型转换器,但仍然存在错误,无法确定如何将该字段保存到数据库中。可以考虑为其添加类型转换器。我不知道为什么

我的实体类

@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);
    }
}

把你的@TypeConverters放在你的类名上

这是因为类型转换器的目标是类
饮酒
,而不是
酒精的列表

@TypeConverters的位置决定类的哪个部分将接收功能。 例如,如果它位于方法名之上,则只有该方法会相应地转换为不同的类型


在您的情况下,您应该将TypeConverter从
List
转换为
String
,反之亦然。然后它应该可以解决问题。

我已经编辑了答案。将PagedTo转换为字符串。不喝酒String@MichałWoźniak如果这个答案对你有帮助,那么你可以点击旁边的复选按钮接受它:)
@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;
    }
}