【问题标题】:Room how can I convert a custom made object房间如何转换定制的对象
【发布时间】:2019-01-31 04:41:51
【问题描述】:

我是 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 表是否制作精良。

欣赏一下

【问题讨论】:

  • 我认为你应该在 UpcomingMovies 实体中只使用 movieId 作为 foriegn key
  • 哦耶...真是失败了,谢谢

标签: android android-room


【解决方案1】:

您需要做的是告诉 Room 如何将您的类转换为它知道如何存储的类型,在大多数情况下,这可以是字符串表示。

首先为您的 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
}

就是这样。

【讨论】:

  • 在您的示例应用程序中将是我的电影?
  • 是的,可以是任何你喜欢的课程。
  • 顺便说一句,我还需要使用外键注释吗?
  • 这实际上是实现细节,取决于您的用例,但不是没有必要。我回答的重点是展示如何使用 TypeConverter。
  • 知道了!谢谢!
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 2023-03-29
  • 2021-06-25
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多