我是Room的新手,我不明白该怎么做。我有一个实体Movie
和另一个称为ÙpcomingMovies
的实体。
@Entity
public class Movie {
@PrimaryKey
@NonNull
public String id;
@ColumnInfo
public String name;
@ColumnInfo
public String title;
}
@Entity
public class UpcomingMovies {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo
public Movie movie;
}
所以我已经知道Room转换对象存在问题,但我仍然没有看到如何使用TypeConverter
转换自定义对象。可能我正在使事情复杂化,但是有人可以帮我解决这个问题吗?我什至不确定我的UpcomingMovies表是否做得好。
欣赏
答案 0 :(得分:3)
您需要做的是告诉Room如何将您的类转换为它知道如何存储的类型,在大多数情况下,这可以是String表示形式。
首先为您的TypeConverters创建一个类,并在其中声明一个函数,该函数可以将您的类型与您要Room进行存储的类型之间进行转换。不要忘记注释这些功能。
class MyTypeConverters {
@TypeConverter
fun appToString(app: App): String = Gson().toJson(app)
@TypeConverter
fun stringToApp(string: String): App = Gson().fromJson(string, App::class.java)
}
然后您要做的就是在声明数据库时告诉Room有关您的TypeConverters的信息
@TypeConverters(MyTypeConverters::class)
abstract class AppDatabase : RoomDatabase() {
..DAO declarations
}
就是这样。