将Json(改装响应)存储在房间数据库中



我是Room数据库的新手,我有来自MSGraph API的JSON响应,即日历事件列表。

我想将此响应存储在Room数据库中。

改装回复示例数据

{
"@odata.context":"",
"value":[
{   

"@odata.etag":"W/"arcvR4W/=="",
"id":"AAvR4W-QUGEzDhwKmVNegAAFPBq3AAAEA==",
"createdDateTime":"2020-05-28T11:15:19.3397025Z",
"lastModifiedDateTime":"2020-09-08T15:57:16.2356808Z",
"changeKey":"arcvR4W/==",
"categories":[

],
"transactionId":null,
"originalStartTimeZone":"UTC",
"originalEndTimeZone":"UTC",
"iCalUId":"040000008200E00074C5B7101A82E831",
"reminderMinutesBeforeStart":15,
"isReminderOn":true,
"hasAttachments":false,
"subject":"Canceled:  discussion",
"bodyPreview":"time didnt set correctly, so cancelling the call",
"importance":"high",
"sensitivity":"normal",
"isAllDay":true,
"isCancelled":true,
"isOrganizer":false,
"responseRequested":true,
"seriesMasterId":"AAMkADU3MAAAAENAABqty9Hhb9BQYTMOHAqZU16AAAU8GrcAAA=",
"showAs":"free",
"type":"occurrence",
"webLink":"https://outlook.office365.com/",
"onlineMeetingUrl":null,
"isOnlineMeeting":true,
"onlineMeetingProvider":"teams",
"allowNewTimeProposals":true,
"isDraft":false,
"hideAttendees":false,
"responseStatus":{
"response":"accepted",
"time":"2020-05-28T11:15:00Z"
},
"body":{
"contentType":"html",
"content":"<html>rn<head>rn<meta http-equiv="Content-Type" content="text/html; charset=utf-8">rn<meta content="text/html; charset=us-ascii">rn</head>rn<body>rn<div>time didnt set correctly, so cancelling the call</div>rn</body>rn</html>rn"
},
"start":{
"dateTime":"2021-03-11T00:00:00.0000000",
"timeZone":"UTC"
},
"end":{
"dateTime":"2021-03-12T00:00:00.0000000",
"timeZone":"UTC"
},
"location":{
"displayName":"",
"locationType":"default",
"uniqueIdType":"unknown",
"address":{

},
"coordinates":{

}
},
"locations":[

],
"recurrence":null,
"attendees":[
{
"type":"required",
"status":{
"response":"none",
"time":"0001-01-01T00:00:00Z"
},
"emailAddress":{
"name":"abc",
"address":"abc@mail.com"
}
},
{
"type":"required",
"status":{
"response":"none",
"time":"0001-01-01T00:00:00Z"
},
"emailAddress":{
"name":"xyz",
"address":"xyz@mail.com"
}
}
],
"organizer":{
"emailAddress":{
"name":"abc",
"address":"abc@mail.com"
}
},
"onlineMeeting":{
"joinUrl":""
}
},

more elements from list

]
}

我搜索了论坛,但没有找到任何正确的解决方案。我想将此响应存储在Room数据库中。有人能帮我找到正确的方法吗。

感谢

您应该创建"日历事件";目标,并使改造的响应像这样之后,您需要从模型中创建实体并创建dao(包含从db中插入、获取、更新和删除数据的方法(并且在您的存储库中,当您收到数据时,将其映射到您的数据库实体使用映射器(可以使用扩展映射自己的数据(我将json转换为kotlin数据类,您可以根据模型创建数据库实体


data class Address()
data class Attendees(val type: String?, val status: Status?, val emailAddress: EmailAddress?)
data class CalendarEvent(val id: String?, val createdDateTime: String?, val lastModifiedDateTime: String?, val changeKey: String?, val categories: List<Any>?, val transactionId: Any?, val originalStartTimeZone: String?, val originalEndTimeZone: String?, val iCalUId: String?, val reminderMinutesBeforeStart: Number?, val isReminderOn: Boolean?, val hasAttachments: Boolean?, val subject: String?, val bodyPreview: String?, val importance: String?, val sensitivity: String?, val isAllDay: Boolean?, val isCancelled: Boolean?, val isOrganizer: Boolean?, val responseRequested: Boolean?, val seriesMasterId: String?, val showAs: String?, val type: String?, val webLink: String?, val onlineMeetingUrl: Any?, val isOnlineMeeting: Boolean?, val onlineMeetingProvider: String?, val allowNewTimeProposals: Boolean?, val isDraft: Boolean?, val hideAttendees: Boolean?, val responseStatus: ResponseStatus?, val body: Body?, val start: Start?, val end: End?, val location: Location?, val locations: List<Any>?, val recurrence: Any?, val attendees: List<Attendees>?, val organizer: Organizer?, val onlineMeeting: OnlineMeeting?)
data class Body(val contentType: String?, val content: String?)
data class Coordinates()
data class EmailAddress(val name: String?, val address: String?)
data class End(val dateTime: String?, val timeZone: String?)
data class Location(val displayName: String?, val locationType: String?, val uniqueIdType: String?, val address: Address?, val coordinates: Coordinates?)
data class OnlineMeeting(val joinUrl: String?)
data class Organizer(val emailAddress: EmailAddress?)
data class ResponseStatus(val response: String?, val time: String?)
data class Start(val dateTime: String?, val timeZone: String?)
data class Status(val response: String?, val time: String?)