有一个已经创建的@Embedded类Player。我想在其中添加 ArrayList 字段,该字段使用 @TypeConverters ,该字段在保存时将List转换为Gson,在加载时将其转换为Gson。
请告诉我如何在void migration()中发出请求
将列表添加到Player的现有实例的方法
课。
@Database(entities = {Save.class}, version = 2)
public abstract class AppDatabase extends RoomDatabase {
public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(final SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE Save ADD COLUMN trainingPower
INTEGER DEFAULT 5 NOT NULL");
}
};
}
播放器类:
public class Player
{
@TypeConverters({AlbumsListConverter.class})
private List<Albums> albumsList = new ArrayList();
@Embedded(prefix="energy_")
public Skills energy;
public int energyCount;
public int energyMax = 50;
public String fameName;
@Embedded(prefix="flow_")
public Skills flow;
public int imageID;
int imagePers;
@Embedded(prefix="mast_")
public Skills mastering;
@Embedded(prefix="mast2_")
public Skills mastering2;
private long money = 50;
@Embedded(prefix="music_")
public Skills music;
private String name;
public int ratingPosition = 1;
public int reclameToken = 0;
@TypeConverters({TrackListConverter.class})
public List<Tracks> releaseList = new ArrayList();
@TypeConverters({MessagesConverter.class})
public List<Massages> messagesList = new ArrayList<>();
private long reputation = 0;
private int respect = 1;
...
}
类保存:
@Entity
public class Save
{
@TypeConverters({ArrayConverter.class})
public String[] AllTopicTracks;
@Embedded
private Player actor;
...
}
TypeConverter:
public class MessagesConverter {
@TypeConverter
public String fromMassagesList(List<Messages> messages)
{
Gson gson = new Gson();
return gson.toJson(messages);
}
@TypeConverter
public List<Messages>toMessagesList(String data)
{
Gson gson = new Gson();
Type type = new TypeToken<List<Messages>>(){}.getType();
return gson.fromJson(data,type);
}
}
答案 0 :(得分:0)
似乎您已将@Embedded
用于多个变量。如果注释了@Embedded
,则将模型类的变量视为同一表的列。因此,对于多个相同类型的对象,您应该使用TypeConverter
,在保存的同时可以将对象转换为json字符串,然后再将其检索为对象。
与其创建嵌入式Player
,不如为播放器创建类型转换器并使用它。这样,您不必为播放器内部的对象创建单独的类型转换器。