【发布时间】:2019-09-12 09:43:02
【问题描述】:
我有一个问题可能对你们中的一些人来说很容易,但我真的无法解决。
我有一个格式如下的 json:
{
"id" : "1641S818",
"balance" : "100.20",
"transactions" : [
{
"id" : "item1",
"price" : "1.50",
"description" : "pen",
"date" : "2018-05-14T14:19:00Z"
},
{
"id" : "item1",
"price" : "9.00",
"description" : "book",
"date" : "2018-05-14T08:19:00Z"
}
]
}
我想第一次尝试使用 Retrofit + Room 构建应用,但在构建模型时遇到了麻烦。
我想出了这个用于 Retrofit 的数据类,它们运行良好。这并不奇怪,因为我知道如何使用它。
data class Account (
val id : String,
val balance : Double,
val transactions : List<Transaction>
)
data class Transaction (
val id : String,
val price : Double,
val description : String,
val date : String
)
当我想将这个结构保存在数据库中时,真正的问题就开始了,账户和交易之间存在这种一对多的关系。到目前为止,我了解到 Room 无法处理这种类型的结构,我应该为数据库模型构建不同的类。所以我做了:
@Entity(tableName = "account")
data class AccountData(
@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = false)
val id: String,
val balance: Double,
)
@Entity(
tableName = "transaction",
foreignKeys = [
ForeignKey(
entity = AccountData::class,
parentColumns = ["id"],
childColumns = ["account_id"],
onUpdate = ForeignKey.CASCADE,
onDelete = ForeignKey.CASCADE
)
]
)
data class TransactionData(
@PrimaryKey(autoGenerate = false)
@ColumnInfo(name = "id")
val transactionId: String,
@ColumnInfo(name = "account_id")
val accountId: String,
val price: Double,
val description: String,
val date: String
)
现在是我卡住的部分。在这种特殊情况下,当我们在对象之间存在复杂关系而不仅仅是普通类时,我找不到任何指南、示例、任何显示在何处使用映射器(可能使用 livedata 或 rx)转换模型的东西。
【问题讨论】:
标签: android mapping retrofit retrofit2 android-room