我决定使用Room来缓存数据,现在由于我所开发的库的情况,我需要隐藏模型的某些字段,然后将其提供给使用我的库的客户端。
下面的模型有orderId
,我添加了它是因为我需要它,但是当我不想给这个填充的模型加上orderId
时。我知道如何忽略JSON
中的字段。但是我该如何在我的模型中隐藏它,然后将其提供给客户端。
首先使用Room会出错吗?
public class Participant {
@PrimaryKey
private long id;
@ColumnInfo(name = "order_id")
private long orderId;
private long threadId;
private String name;
private String firstName;
private String lastName;
例如:
我有一个如下所示的监听器
listener.add(participant);
我想先隐藏orderId
,然后将其传递给侦听器。
然后在另一个类中覆盖此内容:
@Override
public void onAdd(Paticipant participant) {
super.onAdd(participant);
//here
}
答案 0 :(得分:0)
从使用Participant的类中隐藏orderId
的一种方法是为此变量提供一个getter并返回null:
public Long getOrderId() {
return null;
}
我们必须将orderId
更改为Long
才能将其设置为空。
此外,您可以覆盖toString()
方法,以忽略类的任何字符串表示形式的orderId
。
答案 1 :(得分:0)
使用GSON库并为JSON模型创建一个新类,而无需使用orderId
:
class ParticipantJson {
final long id;
final long threadId;
final String name;
final String firstName;
final String lastName;
// Constructor
}
然后您可以使用以下方法创建JSON表示形式:
ParticipantJson participant = new ParticipantJson(/* fields from Room model */);
Gson gson = new Gson();
String json = gson.toJson(participant);
答案 2 :(得分:0)
使用不同的模型进行演示!
抱歉,但我不能强调使用不同模型进行展示的重要性。
尽管您可以使用诸如GSON
之类的关键字或诸如ROOM
之类的注释来隐藏transient
或ignore
之类的库中的字段,但是您无法从类本身隐藏模型属性。还要记住,您不能强制针对非设计目的的模型上的规则。
TLDR; 创建一个新模型,并使用 mapper 将Room
模型映射到这个新的表示模型。