Search code examples
javaandroidrealmrealm-list

Why doesn't RealmList related to a RealmObject updated?


I have some realm data with this structure :

public class Member extends RealmObject {

@PrimaryKey
private int id;
private String name;
private String image_url;
}

public class Department extends RealmObject {

@PrimaryKey
private int id;
// some another fields...
private RealmList<Member> members;
}

public class Meeting extends RealmObject {

@PrimaryKey
private int id;
private String title = "";
private RealmList<Member> members = new RealmList<>();
}

I want select some Members from a Department and add to a selected Meeting.

//properties
int departmentId = 1;
int meetingId = 4;
Meeting meeting;
Department department;
Realm realm;

//declaration
realm = Realm.getDefaultInstance();
realm.beginTransaction();
meeting = realm.where(Meeting.class).equalTo("id", meetingId).findFirst();

department = realm.where(Department.class).equalTo("id", departmentId).findFirst();

//add members
for (Member member : department.getMembers()) {
    if (!thereIsInList(member,meeting.getMembers()))
        meeting.getMembers().add(member);
}

//realm update and close
realm.insertOrUpdate(meeting);
realm.commitTransaction();
realm.close();

Next java code:

public boolean thereIsInList(Member member, List<Member> mList) {
    if (mList == null) return false;
    for (Member m : mList) {
        if (m.getId() == member.getId()) return true;
    }
    return false;
}

But i see New Members are not related to Meeting. Please help me to find what is wrong?


Solution

  • First check in realm studio that the ids you are looking for are correct and the list you need is present in realm referrenced to respective ids. Below snippet handles the real transaction

        Realm realmObj;
    
        //declaration
        realmObj= Realm.getDefaultInstance();
    
    realmObj.executeTransaction(realm -> {
        meeting = realm.where(Meeting.class).equalTo("id", meetingId).findFirst();
    
        department = realm.where(Department.class).equalTo("id", departmentId).findFirst();
    
        //add members
        for (Member member : department.getMembers()) {
            if (!thereIsInList(member,meeting.getMembers()))
                meeting.getMembers().add(member);
        }
    
      });