Как сохранять связанные классы в Realm?

150
08 октября 2017, 22:25

Я только начал использовать Realm. Сначала понятно, если хранить один класс, то есть один объект. Но когда предстоит хранить классы, у которых в полях пользовательские типы, и у них тоже самое.

То есть:

class Dog extend RealmObject{
private int count;
private Cat cat;
// геттеры и сеттеры
}
class Cat extend RealmObject{
private int count;
private RealmList<Cow> cowList;
// геттеры и сеттеры
}
class Cow extend RealmObject{
private int count;
private Horse horse;
// геттеры и сеттеры
}

Так вот, чтобы такое хранить в базе написал кучу строк:

public void setChatsList(final ChatsModel chatsModel) {
    Realm realm = Realm.getDefaultInstance();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(@NonNull Realm realm) {
            ChatsModel realmChats = realm.createObject(ChatsModel.class);
            Response realmResponse = realm.createObject(Response.class);
            Item realmItem = realm.createObject(Item.class);
            Message realmMessage = realm.createObject(Message.class);
            Attachment realmAttachment = realm.createObject(Attachment.class);
            Video realmVideo = realm.createObject(Video.class);
            Response response = chatsModel.getResponse();
            RealmList<Item> items = new RealmList<>();
            Integer itemCount = response.getCount();
            RealmList<Item> itemList = response.getItems();
            if (itemList != null) {
                for (Item item : itemList) {
                    Message message = item.getMessage();
                    realmMessage.setId(message.getId());
                    realmMessage.setDate(message.getDate());
                    realmMessage.setOut(message.getOut());
                    realmMessage.setUserId(message.getUserId());
                    realmMessage.setReadState(message.getReadState());
                    realmMessage.setTitle(message.getTitle());
                    realmMessage.setBody(message.getBody());
                    realmMessage.setRandomId(message.getRandomId());
                    RealmList<Attachment> attachments = message.getAttachments();
                    RealmList<Attachment> attachmentList = new RealmList<>();
                    if (attachments != null) {
                        for (Attachment attachment : attachments) {
                            String type = attachment.getType();
                            Video video = attachment.getVideo();
                            realmVideo.setAccessKey(video.getAccessKey());
                            realmVideo.setCanAdd(video.getCanAdd());
                            realmVideo.setCanEdit(video.getCanEdit());
                            realmVideo.setComments(video.getComments());
                            realmVideo.setDate(video.getDate());
                            realmVideo.setDescription(video.getDescription());
                            realmVideo.setDuration(video.getDuration());
                            realmVideo.setId(video.getId());
                            realmVideo.setOwnerId(video.getOwnerId());
                            realmVideo.setPhoto130(video.getPhoto130());
                            realmVideo.setPhoto320(video.getPhoto320());
                            realmVideo.setPhoto640(video.getPhoto640());
                            realmVideo.setPlatform(video.getPlatform());
                            realmVideo.setTitle(video.getTitle());
                            realmVideo.setViews(video.getViews());
                            realmAttachment.setType(type);
                            realmAttachment.setVideo(realmVideo);
                            attachmentList.add(realmAttachment);
                        }
                        realmMessage.setAttachments(attachmentList);
                    }
                    realmResponse.getItems().add(item);
                }
            }
            realmResponse.setCount(itemCount);
            realmChats.setResponse(realmResponse);
        }
    });
}

Согласитесь, что для одной задачи строк многовато. И мне кажется, что я делаю не правильно

Вопрос: Как правильно это сделать и как сократить мой метод, подскажите?

READ ALSO
Как ввести данные в &lt;input&gt; при помощи Jsoup?

Как ввести данные в <input> при помощи Jsoup?

Есть необходимость залогинится на сайтеДля этого нужно ввести имя пользователя и пароль

252
Улучшение качества звукозаписи в BASS.NET

Улучшение качества звукозаписи в BASS.NET

Имеет ли BASSNET библиотека возможности улучшения качества звукозаписи (устранение шумов и щелчков)?

182
Приложение не выполняется,как служба

Приложение не выполняется,как служба

Есть безинтерфейсное приложение-апдейтерКак обычный экзешник - работает без нареканий

248