gpt4 book ai didi

java - 无法对 ROOM 和 Retrofit 使用相同的模型

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:25 28 4
gpt4 key购买 nike

我正在执行一个 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,现在我创建的模型将适用于 RetroFit,但不适用于 Room,因为 Room 不支持实体内的列表对象。

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

我尝试使模型与 ROOM 一起使用,但之后我的改造 api 回调来到 onFailure(),原因很明显,它没有被解析,我收到的错误是 无法向调试器发送回复:损坏的管道

有什么方法可以让我忽略 Retrofit 调用中的某些特定属性,并使用相同的模型来实现这两个目的。

我的模型看起来:

@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;
}
}

最佳答案

您可以使用第一种方法,通过使用 @Ignore 注释您想要在房间中忽略的字段

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

假设你的 Dao 中有这样的东西

@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 类必须具有 Friend 对象列表,而不是 Friends 对象。
  • 您必须使用适当的外键创建一个 friend 表(这包括向 friend 对象添加 userId 字段)

关于java - 无法对 ROOM 和 Retrofit 使用相同的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228865/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com