房间如何转换自定义对象

Room how can I convert a custom made object

提问人:Greggz 提问时间:8/25/2018 更新时间:8/25/2018 访问量:3517

问:

我是 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 在转换对象方面有问题,但我还没有看到如何使用 转换自定义对象。可能我使事情复杂化了,但有人可以帮我解决这个问题吗?我什至不确定我的 UpcomingMovies 表是否制作精良。TypeConverter

欣赏它

安卓 android-room

评论

1赞 Qasim 8/25/2018
我认为你应该像你的UpcomingMovies实体一样movieIdforiegn key
0赞 Greggz 8/25/2018
噢......真是太失败了,谢谢

答:

12赞 Ivan Wooll 8/25/2018 #1

你需要做的是告诉 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
}

就是这样。

评论

0赞 Greggz 8/25/2018
在您的示例中,APP应该是我的电影吗?
0赞 Ivan Wooll 8/25/2018
是的,它可以是你喜欢的任何类。
0赞 Greggz 8/25/2018
顺便说一句,我还需要使用外键注释吗?
0赞 Ivan Wooll 8/25/2018
这确实是实现细节,取决于您的用例,但不,这不是必需的。我回答的重点是展示如何使用 TypeConverter。
0赞 Greggz 8/25/2018
明白了!谢谢!