【问题标题】:Store Json (Retrofit response) in to Room Database将 Json(改造响应)存储到 Room 数据库
【发布时间】:2021-06-26 06:09:41
【问题描述】:

我是 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>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\n<div>time didnt set correctly, so cancelling the call</div>\r\n</body>\r\n</html>\r\n"
         },
         "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 数据库中。有人可以帮助我遵循正确的方法。

谢谢

【问题讨论】:

    标签: android json android-room


    【解决方案1】:

    您应该创建“CalendarEvent”对象并使改造的响应像这样调用 之后,您需要从模型创建实体并创建 dao(包含插入、获取、更新和删除数据库中的数据的方法) 并在您的存储库中,当您收到数据时将其映射到您的数据库实体 使用您的映射器(您可以使用扩展来映射您自己的数据) 我将该 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?)
    
    
    
    

    【讨论】:

    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2021-05-28
    • 2015-02-05
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2023-03-27
    • 2019-03-14
    相关资源
    最近更新 更多