如何为房间数据库中的嵌套对象创建实体类

问题描述

我得到了GitHub API的回应

{
    "url": "https://api.github.com/repos/square/okhttp/issues/6235","repository_url": "https://api.github.com/repos/square/okhttp","labels_url": "https://api.github.com/repos/square/okhttp/issues/6235/labels{/name}","comments_url": "https://api.github.com/repos/square/okhttp/issues/6235/comments","events_url": "https://api.github.com/repos/square/okhttp/issues/6235/events","html_url": "https://github.com/square/okhttp/pull/6235","id": 684864978,"node_id": "MDExOlB1bGxSZXF1ZXN0NDcyNjgxNjU4","number": 6235,"title": "Document interceptor throwing modes","user": {
        "login": "swankjesse","id": 133019,"node_id": "MDQ6VXNlcjEzMzAxOQ==","avatar_url": "https://avatars3.githubusercontent.com/u/133019?v=4","gravatar_id": "","url": "https://api.github.com/users/swankjesse","html_url": "https://github.com/swankjesse","followers_url": "https://api.github.com/users/swankjesse/followers","following_url": "https://api.github.com/users/swankjesse/following{/other_user}","gists_url": "https://api.github.com/users/swankjesse/gists{/gist_id}","starred_url": "https://api.github.com/users/swankjesse/starred{/owner}{/repo}","subscriptions_url": "https://api.github.com/users/swankjesse/subscriptions","organizations_url": "https://api.github.com/users/swankjesse/orgs","repos_url": "https://api.github.com/users/swankjesse/repos","events_url": "https://api.github.com/users/swankjesse/events{/privacy}","received_events_url": "https://api.github.com/users/swankjesse/received_events","type": "User","site_admin": false
    },"labels": [

    ],"state": "open","locked": false,"assignee": null,"assignees": [

    ],"milestone": null,"comments": 0,"created_at": "2020-08-24T18:09:47Z","updated_at": "2020-08-24T18:21:18Z","closed_at": null,"author_association": "MEMBER","active_lock_reason": null,"pull_request": {
        "url": "https://api.github.com/repos/square/okhttp/pulls/6235","diff_url": "https://github.com/square/okhttp/pull/6235.diff","patch_url": "https://github.com/square/okhttp/pull/6235.patch"
    },"body": "","performed_via_github_app": null
}

我尝试了以下代码

@Entity(tableName = "issue_list_table")
class IssueModal {

    @Serializedname("id")
    @Expose
    @PrimaryKey
    var id: Int = 0

    @Serializedname("body")
    @Expose
    @ColumnInfo(name = "body")
    var body: String = ""

    @Serializedname("url")
    @Expose
    @ColumnInfo(name = "url")
    var url: String = ""

    @Serializedname("repository_url")
    @Expose
    @ColumnInfo(name = "repository_url")
    var repositoryUrl: String = ""

    @Serializedname("labels_url")
    @Expose
    @ColumnInfo(name = "labels_url")
    var labelsUrl: String = ""

    @Serializedname("comments_url")
    @Expose
    @ColumnInfo(name = "comments_url")
    var commentsUrl: String = ""

    @Serializedname("events_url")
    @Expose
    @ColumnInfo(name = "events_url")
    var eventsUrl: String = ""

    @Serializedname("html_url")
    @Expose
    @ColumnInfo(name = "html_url")
    var htmlUrl: String = ""

    @Serializedname("node_id")
    @Expose
    @ColumnInfo(name = "node_id")
    var nodeId: String = ""

    @Serializedname("number")
    @Expose
    @ColumnInfo(name = "number")
    var number: Int = 0

    @Serializedname("title")
    @Expose
    @ColumnInfo(name = "title")
    var title: String = ""

    @Serializedname("user")
    @Expose
    @Embedded
    var user: User = User()

    @Serializedname("state")
    @Expose
    @ColumnInfo(name = "state")
    var state: String = ""

    @Serializedname("locked")
    @Expose
    @ColumnInfo(name = "locked")
    var locked: Boolean = false

    @Serializedname("comments")
    @Expose
    @ColumnInfo(name = "comments")
    var comments: Int = 0

    @Serializedname("created_at")
    @Expose
    @ColumnInfo(name = "createdAt")
    var createdAt: String = ""

    @Serializedname("updated_at")
    @Expose
    @ColumnInfo(name = "updated_at")
    var updatedAt: String = ""

    @Serializedname("author_association")
    @Expose
    @ColumnInfo(name = "author_association")
    var authorAssociation: String = ""


}

用户类别

class User {

    @Serializedname("id")
    @Expose
    @PrimaryKey
    @ColumnInfo(name = "user_id")
    var id: Int = 0

    @Serializedname("login")
    @Expose
    @ColumnInfo(name = "login")
    var login: String = ""


    @Serializedname("node_id")
    @Expose
    @ColumnInfo(name = "user_node_id")
    var nodeId: String = ""

    @Serializedname("avatar_url")
    @Expose
    @ColumnInfo(name = "avatar_url")
    var avatarUrl: String = ""

    @Serializedname("gravatar_id")
    @Expose
    @ColumnInfo(name = "gravatar_id")
    var gravatarId: String = ""


    @Serializedname("html_url")
    @Expose
    @ColumnInfo(name = "user_html_url")
    var htmlUrl: String = ""

    @Serializedname("followers_url")
    @Expose
    @ColumnInfo(name = "followers_url")
    var followersUrl: String = ""

    @Serializedname("following_url")
    @Expose
    @ColumnInfo(name = "following_url")
    var followingUrl: String = ""

    @Serializedname("gists_url")
    @Expose
    @ColumnInfo(name = "gists_url")
    var gistsUrl: String = ""

    @Serializedname("starred_url")
    @Expose
    @ColumnInfo(name = "starred_url")
    var starredUrl: String = ""

    @Serializedname("subscriptions_url")
    @Expose
    @ColumnInfo(name = "subscriptions_url")
    var subscriptionsUrl: String = ""

    @Serializedname("organizations_url")
    @Expose
    @ColumnInfo(name = "organizations_url")
    var organizationsUrl: String = ""

    @Serializedname("repos_url")
    @Expose
    @ColumnInfo(name = "repos_url")
    var reposUrl: String = ""

    @Serializedname("events_url")
    @Expose
    @ColumnInfo(name = "user_events_url")
    var eventsUrl: String = ""

    @Serializedname("received_events_url")
    @Expose
    @ColumnInfo(name = "received_events_url")
    var receivedEventsUrl: String = ""

    @Serializedname("type")
    @Expose
    @ColumnInfo(name = "type")
    var type: String = ""

    @Serializedname("site_admin")
    @Expose
    @ColumnInfo(name = "site_admin")
    var siteAdmin: Boolean = false
}

我想在房间数据库中保存GitHub api响应,但我不知道如何为嵌套对象创建实体类

如果需要更多信息,请告诉我。提前致谢。您的努力将不胜感激。

解决方法

您可以检查this Medium article,看看是否有帮助。这不是您的确切用例,但确实处理了一系列嵌套对象。