Необходимо ли расширять каждый класс модели с помощью RealmObject при работе с областью?

android realm

1653 просмотра

1 ответ

57 Репутация автора

Я использую Realm ORM для своего приложения. У меня есть 3 модельных класса, из которых два расширяет RealmObject, а другой - нет.

public class Party extends RealmObject implements Parcelable {
    @PrimaryKey
    public int id;
    public String name;
    public String name_en;
    public String name_ne;
    public String address;
    public String phoneNumber;
    public String taxRegistrationNumber;
    public String partyType;

второй класс содержит поле типа Party. Но это не расширяет RealmObject

public class CreatePurchaseOrder implements Parcelable {
    public int voucherNumber;
    public Date date;
    public Party party;
    String agent;

Третий класс содержит поле для CreatePurchaseOrder и расширяет RealmObject

[public class CreatePurchaseOrderRow extends RealmObject implements Parcelable {
    @PrimaryKey
    public int id;
    private int serialNumber;
    private String specification;
    private float quantity;
    private float rate;
    private String remarks;
    private boolean fulfilled;
    private CreatePurchaseOrder createPurchaseOrder;

При таком подходе генерируется скриншот сообщения об ошибке сообщения об ошибке

скриншот сообщения об ошибке

Так нужно ли расширять каждый класс Model с помощью RealmObject?

Автор: Suresh Basnet Источник Размещён: 19.07.2016 06:28

Ответы (1)


7 плюса

33296 Репутация автора

Решение

Технически вам не нужно расширяться RealmObjectнепосредственно от вашего модельного класса.

В документах говорят:

Классы моделей областей создаются путем расширения базового класса RealmObject.

Это означает, что если вы не расширяете RealmObject, ваш класс не является Realmмоделью, поэтому он не может быть сохранен в области.

Однако вы также можете реализовать RealmModelинтерфейс и аннотировать свой класс модели с помощью@RealmClass

@RealmClass
public class MyModel implements RealmModel {

}

как уже упоминалось здесь :

Почему классы моделей должны расширять RealmObject?

Нам нужно добавить специфические функциональные возможности Realm в ваши классы моделей. Это также позволяет нам использовать дженерики в наших API, облегчая их чтение и использование. Если вы не хотите расширять базовый класс, вы можете вместо этого реализовать интерфейс RealmModel.

и здесь :

Альтернативой расширению базового класса RealmObject является реализация интерфейса RealmModel и добавление аннотации @RealmClass.

Это другое средство для достижения той же цели. Проблема, с которой вы сталкиваетесь, такая же. Вы не можете хранить простые объекты в области. Вы должны подключить свой класс модели к Realm одним из двух способов, упомянутых выше.

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

// With RealmObject
myModel.isValid();

// With RealmModel
RealmObject.isValid(myModel);
Автор: Tim Castelijns Размещён: 19.07.2016 06:42
Вопросы из категории :
32x32