私は最近Realm
を使用し始めました。最初に、1つのクラス、つまり1つのオブジェクトを保存すると、それは明らかです。しかし、フィールドにカスタム型を持つクラスを格納する場合、それらは同じことがあります。レルムに関連するクラスを保存する方法は?
です:だから
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);
}
});
}
つのタスク行のためにあまりにも多くあることに同意します。そして、私はそれが間違っていると私に思われます
質問:それを正しく行う方法と私の方法を短縮する方法を教えてください?
iffyを見て、Realmインスタンスが終了しても閉じられていない 'attachmentList'以外は、それは正常に見えます。 – EpicPandaForce
@EpicPandaForce、しかし' attachmentList'の何が問題なのですか? –
'realmMessage'は管理オブジェクトですが、' attachmentList'はアンマネージRealmListです。 'realmMessage.getAttachments()。addAll(attachmentList)'にする必要があります。 – EpicPandaForce