2016-10-10 2 views
1

내 영역 데이터베이스에 여러 객체를 쓰려고합니다.db에 쓰기가 연결을 저장하지 않습니다.

다른 개체 (RealmUser)와 연결되어 있으므로 RealmList<RealmActivity>getActivities().addAll(activities)을 추가합니다.

먼저이 컬렉션을 copyToRealm(activities)을 통해 영역에 복사하지 않고 시도했지만 여기에 문제가 있습니다. 이 기능은 앱을 다시 시작하지 않는 이상 작동합니다 (다른 활동으로 돌아갈 때 이상하게도). 그렇게하는 즉시 활동은 데이터베이스에 유지되지만 더 이상 사용자와 연관되지 않습니다. realm.copyToRealmOrUpdate(user);realm.insertOrUpdate(user); (코드에서 볼 수 있듯이)을 시도했지만이 활동보다 장기간 연결을 유지하지 않습니다.

내 생각에 연관성은 실제 파일 (?)에 절대 적용되지 않으며 활동을 종료하자마자 데이터베이스의 메모리 이미지가 삭제되어 연결이 끊어지는 반면 내 실제 데이터는 실제 파일에 유지됩니다. 그렇다면 협회를 지속시키기 위해 무엇을해야합니까? beeender으로

try(Realm realm = Realm.getDefaultInstance()) 
{ 
    realm.executeTransaction(new Realm.Transaction() 
    { 
     @Override 
     public void execute(Realm realm) 
     { 
      RealmUser user = realm.where(RealmUser.class).equalTo("userId", userId).findFirst(); 
      List<RealmActivity> tmp = realm.copyToRealm(activities); 

      user.getActivities().addAll(tmp); 
      user.getVitalData().addAll(realm.copyToRealm(vitalData)); 
      user.getDailyActivities().addAll(realm.copyToRealm(dailies)); 

      realm.copyToRealmOrUpdate(user); 
      realm.insertOrUpdate(user); 
     } 
    }); 
} 
+2

연결을 유지할 필요가 없습니다. 표시하는 코드는 연관을 디스크에 저장해야합니다. 'userId'는 프라이 머리 키입니까? 'copyToRealmOrUpdate()'와'insertOrUpdate'가 모두 작동해야합니다. 앱이 시작될 때 빈'activities'를 사용하여 사용자를 db로 복사합니까? 이렇게하면 사용자 객체의 빈 목록에 의해 동일한 'userId'로 사용자 객체를 덮어 씁니다. – beeender

+0

감사합니다.이 덧글에 1000 번 이상 감사드립니다. 사실 실제로 의도하지 않은 빈 활동 목록으로 사용자를 저장했습니다! 다시 한 번 감사드립니다! – wickermoon

답변

1

이미 나는 빈 활동 I가 로그인 할 때마다 사용자의 인스턴스 목록을 저장하고, 지적했다. 그게 문제였다.

관련 문제