房间如何转换定制对象

时间:2018-08-24 17:00:25

标签: android android-room

我是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表是否做得好。

欣赏

1 个答案:

答案 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
}

就是这样。