是否可以在模型中隐藏某些字段?

时间:2018-11-09 14:01:26

标签: android model android-room

我决定使用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 
}

3 个答案:

答案 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之类的注释来隐藏transientignore之类的库中的字段,但是您无法从类本身隐藏模型属性。还要记住,您不能强制针对非设计目的的模型上的规则。

TLDR; 创建一个新模型,并使用 mapper Room模型映射到这个新的表示模型。