无法对ROOM和翻新使用相同的模型

时间:2019-05-20 22:18:51

标签: java android retrofit android-room

我正在进行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列表,我就无法使用房间了,现在创建的模型将适用于RetroFit,但它将对于Room不起作用,因为Room不支持实体内部的列表对象。

我使用@TypeConverter对其进行了修复,但是之后改装停止工作。 我正在寻找一种方法,以便可以对两者使用相同的模型(api调用+通过房间持久保存数据)。

我试图使模型与ROOM一起使用,但是在那之后,由于明显的原因(没有得到解析),我的改造api回调即将进入onFailure(),我收到的错误是{{1 }}。

有没有办法让我忽略Retrofit调用中的某些特定属性,并为这两个目的使用相同的模型。

我的模特看起来:

Failed sending reply to debugger: Broken pipe

1 个答案:

答案 0 :(得分:0)

您可以使用第一种方法,用@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())

使用这种方法,您需要做一些更改:

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