Можно ли скрыть некоторые поля от нашей модели? - PullRequest
0 голосов
/ 09 ноября 2018

Я решил использовать Room для кэширования данных, и теперь из-за ситуации с библиотекой, которую я разработал, мне нужно скрыть некоторые поля моей модели и затем передать их клиенту, который использует мою библиотеку.

Модель ниже имела orderId, и я добавил это, потому что мне это нужно, но когда я не хочу давать эту заполненную модель с orderId. я знаю, как игнорировать поля в JSON. Но как я могу спрятать эту модель от своей модели, а затем передать ее клиенту?

Допускаю ли я ошибку при использовании комнаты?

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 голосов
/ 09 ноября 2018

Используйте библиотеку 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);
0 голосов
/ 13 ноября 2018

ИСПОЛЬЗУЙТЕ РАЗНУЮ МОДЕЛЬ ДЛЯ ПРЕЗЕНТАЦИИ!

Извините за заглавные буквы, но я не могу подчеркнуть, насколько важно использовать другую модель для презентации. Хотя вы можете скрыть поля из библиотек, таких как GSON или ROOM, используя ключевые слова, такие как transient или аннотации, такие как ignore, вы не можете скрыть атрибут модели от самого класса. Также помните, что вы не можете применять правило для модели, которая не предназначена для этой цели.

TLDR; Создайте новую модель и с помощью mapper отобразите модель Room на эту новую модель представления.

0 голосов
/ 09 ноября 2018

Один из способов скрыть orderId от классов, в которых используется Участник, - предоставить получатель для этой переменной и вернуть ноль:

public Long getOrderId() {
    return null;
}

Мы должны изменить orderId на Long, чтобы оно было установлено в ноль.

Кроме того, вы можете переопределить метод toString(), чтобы игнорировать orderId в любых строковых представлениях класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...