有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用相同的模型进行房间和改装

我正在进行一个api调用,响应包括对象列表,json响应是:

[
{
    "name": "jay",
    "age": 27,
    "avatar": "https://avatars.abc/bat_man/",
    "friends": [{
            "friend_name": "abc",
            "friend_age": 23,
            "avatar": "https://avatars.abc/thor/"
        },
        {
            "friend_name": "xyz",
            "friend_age": 26,
            "avatar": "https://avatars.abc/hulk/"
        },
        {
            "friend_name": "pqr",
            "friend_age": 28,
            "avatar": "https://avatars.abc/iron_man/"
        }
    ]
},

{
    "name": "ajay",
    "age": 27,
    "avatar": "https://avatars.abc/bat_man/",
    "friends": [{
            "friend_name": "abc",
            "friend_age": 23,
            "avatar": "https://avatars.abc/thor/"
        },
        {
            "friend_name": "xyz",
            "friend_age": 26,
            "avatar": "https://avatars.abc/hulk/"
        },
        {
            "friend_name": "pqr",
            "friend_age": 28,
            "avatar": "https://avatars.abc/iron_man/"
        }
     ]
  }

]

我创建了一个没有friends属性的模型,只要我添加了一个Friend列表,我就无法使用room,现在我创建的模型可以用于改造,但它不适用于room,因为room不支持实体内的列表对象

我用@TypeConverter修复了它,但在那之后,改装就停止了。 我正在寻找一种方法,这样我就可以对两者使用相同的模型(api调用+通过room持久化数据)

我试图让模型与ROOM一起工作,但在那之后,我的改型api回调将到达onFailure(),原因很明显,它没有被解析,我收到的错误是Failed sending reply to debugger: Broken pipe

有没有什么方法可以让我忽略改装呼叫中的某些特定属性,并将同一型号用于这两个目的

我的模特看起来:

@Entity(tableName = "user_table")
public class User {
    private String name;
    private String href;
    private String avatar;
    private Friends friend;

public User(String name, String href, String avatar, Friends friend) {
    this.name = name;
    this.href = href;
    this.avatar = avatar;
    this.friend = friend;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getHref() {
    return href;
}

public void setHref(String href) {
    this.href = href;
}

public String getAvatar() {
    return avatar;
}

public void setAvatar(String avatar) {
    this.avatar = avatar;
}

public Friends getFriend() {
    return friend;
}

public void setFriend(Friends friend) {
    this.friend = friend;
}
}

共 (1) 个答案

  1. # 1 楼答案

    您可以使用第一种方法,用@Ignore注释要在文件室中忽略的字段

    @Entity(tableName = "user_table")
    public class User {
        private String name;
        private String href;
        private String avatar;
        @Ignore private Friends friend;
    

    假设你的刀里有这样的东西

    @Dao

    public interface MyDao {
    
        @Insert
        public void insertUser(User user);
    
        @Insert
        public void insertFriends(List<Friend> friends);
    }
    

    然后,您可以按如下方式添加数据

    myDao.insertUser(user)
    myDao.insertFriends(user.getFriend())
    

    使用这种方法,您必须做一些更改:

    • 用户类必须有Friend对象的列表,而不是Friends对象
    • 必须使用适当的外键创建一个表Friends(这包括向Friends对象添加一个userId字段)