android - 作者为什么要加@field :SerializedName annotation to a field in Room database?

标签 android android-room

我正在使用 https://github.com/googlecodelabs/android-paging 的示例代码学习 Room

代码 A 用于定义 @Entity一张 table ,你可以看到it .

通常它会添加 @ColumnInfo字段注释,例如 @ColumnInfo(name = "first_name") val firstName: String?, ... .

为什么作者加了@field:SerializedName对房间数据库中的字段进行注释?

代码 A

@Entity(tableName = "repos")
data class Repo(
    @PrimaryKey @field:SerializedName("id") val id: Long,
    @field:SerializedName("name") val name: String,
    @field:SerializedName("full_name") val fullName: String,
    @field:SerializedName("description") val description: String?,
    @field:SerializedName("html_url") val url: String,
    @field:SerializedName("stargazers_count") val stars: Int,
    @field:SerializedName("forks_count") val forks: Int,
    @field:SerializedName("language") val language: String?
)

最佳答案

@SerializedName annotation 是 Gson 的一部分,用于在 Json 中定义这些属性的名称。
@ColumnInfo annotation 是 Room 的一部分,用于在 SQLite 中定义这些属性的列名。

如果这些注释都没有定义,则属性/字段名称将用作 Json 属性或列的名称。

Why does the author add @field:SerializedName annotation to a field in Room database?



因为 Room 实体被重用为 Gson DTO。

关于android - 作者为什么要加@field :SerializedName annotation to a field in Room database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60585265/

相关文章:

android - 聚焦或单击时如何突出显示 ImageView?

Android 应用程序在第二次或第三次启动后崩溃(显示内存错误)

c# - 是什么原因导致 "ConvertResourcesCases"意外失败?

java - 由 : java. lang.IllegalStateException 引起:尝试重新打开已关闭的对象:SQLiteDatabase

使用 RxJava 处理空查询结果的 Android Room

java - Android Room 分页 - 如何读取两个表?

android - Room中如何实现同步(Android持久化库)

android - 在预构建阶段如何在Gradle中下载并实现依赖项?

android - 房间 - 选择带有 IN 条件的查询?

android [java.lang.NoClassDefFoundError : android. widget.Toolbar]