패키지 io.realm

클래스 DynamicRealm

  • 구현된 모든 인터페이스:
    Closeable, AutoCloseable

    public class DynamicRealm
    extends Object
    DynamicRealm은 Realm 의 동적 변형입니다. 즉, 데이터 및/또는 쿼리에 대한 모든 액세스가 클래스 유형 참고 대신 문자열 기반 클래스 이름을 사용하여 수행됩니다.

    이 기능은 마이그레이션을 하거나 CSV 또는 XML 파일과 같은 문자열 기반 데이터로 작업할 때 유용합니다.

    동적 모드와 유형 모드 모두에서 Realm 파일을 여는 데 동일한 RealmConfiguration 을 사용할 수 있지만 입력 모드와 동적 버전이 모두 열린 상태에서 스키마를 수정하는 것은 적극 권장하지 않으며 입력된 Realm이 충돌할 가능성이 높습니다. 마이그레이션 중에는 DynamicRealm만 열립니다.

    동적 Realm은 스키마 또는 스키마 버전을 적용하지 않으며 RealmMigration 코드가 RealmConfiguration 에 정의된 경우에도 사용되지 않습니다.

    즉, Realm이 유형 모드에서 열릴 때까지 스키마가 생성되거나 유효성이 검사되지 않습니다. Realm 파일을 먼저 동적 모드에서 열면 해당 파일에는 클래스와 필드에 대한 정보가 포함되지 않으며 스키마에 의해 정의된 클래스에 대한 쿼리가 실패합니다.

    다음도 참조하세요.
    Realm, RealmSchema
    • 필드 세부 정보

      • WRITE_EXECUTOR

        public static final io.realm.internal.async.RealmThreadPoolExecutor WRITE_EXECUTOR
        쓰기 작업에 사용되는 스레드 풀 실행기 - 쓰기는 병렬화할 수 없으므로 스레드가 하나만 필요합니다.
      • SharedRealm

        public io.realm.internal.OsSharedRealm sharedRealm
      • objectContext

        public static final io.realm.BaseRealm.ThreadLocalRealmObjectContext objectContext
    • 메서드 세부 정보

      • getInstance

        public static DynamicRealm getInstance​(RealmConfiguration configuration)
        제공된 RealmConfiguration 에 의해 정의된 Realm 인스턴스의 동적 변형을 반환하는 Realm 정적 생성자입니다. 동적 Realm은 schemaVersion 및 스키마에는 상관하지 않으므로 DynamicRealm을 열어도 마이그레이션이 trigger되지 않습니다.
        반환합니다:
        구성에 의해 정의된 DynamicRealm입니다.
        예외 처리:
        RealmFileException - 기본 Realm 파일에 액세스할 때 오류가 발생한 경우.
        IllegalArgumentException - configuration 인수가 null 인 경우
        다음도 참조하세요.
        for details on how to configure a Realm.
      • getInstanceAsync

        public static RealmAsyncTask getInstanceAsync​(RealmConfiguration configuration,
                                                      DynamicRealm.Callback callback)
        프로세스에서 RealmConfiguration 당 첫 번째 Realm 인스턴스를 생성하는 것은 모든 초기화 코드를 해당 점에서 실행해야 하므로(Realm 설정, 스키마 유효성 검사 및 초기 데이터 생성) 시간이 걸릴 수 있습니다. 이 메서드는 초기화 작업을 백그라운드 스레드에 배치하고 초기화가 완료된 후 Realm 인스턴스를 호출자 스레드에 비동기적으로 전달합니다.
        매개변수:
        configuration - RealmConfiguration Realm을 여는 데 사용됩니다.
        callback - 결과를 반환하기 위해 호출됩니다.
        반환합니다:
        취소 가능한 작업을 나타내는 RealmAsyncTask 입니다.
        예외 처리:
        IllegalArgumentException - null RealmConfiguration 또는 null DynamicRealm.Callback 가 제공된 경우.
        IllegalStateException - 이벤트 루프가 아닌 또는 IntentService 스레드에서 호출된 경우.
        다음도 참조하세요.
        for more details.
      • createObject

        public DynamicRealmObject createObject​(String className)
        Realm에 새 객체를 인스턴스화하고 추가합니다.
        매개변수:
        className - 생성할 객체의 클래스 이름입니다.
        반환합니다:
        새 객체.
        예외 처리:
        RealmException - 객체를 생성할 수 없는 경우.
      • createObject

        public DynamicRealmObject createObject​(String className,
                                               객체 PrimaryKeyValue)
        지정된 기본 키를 사용하여 객체를 생성합니다. 기본 키가 정의되지 않은 클래스는 대신 createObject(String)}을(를) 사용해야 합니다.
        반환합니다:
        새 객체. 제공된 값을 가질 기본 키 필드를 제외한 모든 필드는 해당 유형에 대한 기본값을 갖습니다.
        예외 처리:
        RealmException - 기본 키가 유효하지 않아 객체를 생성할 수 없는 경우입니다.
        IllegalStateException - 모델 클래즈에 기본 키가 정의되어 있지 않은 경우.
        IllegalArgumentException - primaryKeyValue 에 예상 값으로 변환할 수 있는 값이 없는 경우.
      • createEmbeddedObject

        public DynamicRealmObject createEmbeddedObject​(문자열 className,
                                                       DynamicRealmObjectparentObject ,
                                                       문자열 parentProperty)
        새로운 내장된 객체를 인스턴스화하고 Realm에 추가합니다.

        이 메서드는 포함된 것으로 표시된 유형의 객체를 생성하는 데만 사용해야 합니다.

        매개변수:
        className - 생성할 객체의 클래스 이름입니다.
        parentObject - 내장된 객체에 대한 참고를 보유해야 하는 객체입니다. 상위 속성이 목록인 경우 내장된 객체는 해당 목록의 끝에 추가됩니다.
        parentProperty - 참고를 보유한 상위 클래스의 속성입니다.
        반환합니다:
        새로 생성된 내장된 객체입니다.
        예외 처리:
        IllegalArgumentException - clazz 이(가) 포함된 클래스가 아니거나 상위 클래스의 속성이 적절한 유형의 객체를 보유할 수 없는 경우
        다음도 참조하세요.
        RealmClass.embedded()
      • 위치

        public RealmQuery<DynamicRealmObject> where​(String className)
        제공된 클래스를 쿼리하는 데 사용할 수 있는 RealmQuery를 반환합니다.
        매개변수:
        className - 쿼리할 객체의 클래스입니다.
        반환합니다:
        RealmQuery를 사용하여 제공된 유형의 특정 객체를 쿼리할 수 있습니다.
        예외 처리:
        IllegalArgumentException - 클래스가 존재하지 않는 경우.
        다음도 참조하세요.
        RealmQuery
      • 모든 변경 리스너 제거

        public void removeAllChangeListeners()
        모든 사용자 정의 변경 수신기를 제거합니다.
        예외 처리:
        IllegalStateException - 이벤트 루프가 아닌 스레드에서 리스너를 제거하려고 하는 경우.
        다음도 참조하세요.
        RealmChangeListener
      • 삭제

        public void delete​(String className)
        Realm에서 지정된 클래스의 모든 객체를 삭제합니다.
        매개변수:
        className - 모든 객체를 제거해야 하는 클래스입니다.
        예외 처리:
        IllegalStateException - Realm이 닫히거나 잘못된 스레드에서 호출된 경우
      • asFlowable

        public Flowable<DynamicRealm> asFlowable()
        이 Realm의 변경 사항을 모니터링하는 RxJava Flowable을 반환합니다. 구독 시 현재 상태를 방출합니다. Realm이 업데이트될 때마다 항목이 계속 방출되며 onComplete 은(는) 호출되지 않습니다.

        Realm Flowable에서 방출된 항목은 동결됩니다( freeze() 참조). 즉, 변경할 수 없으며 모든 스레드에서 읽을 수 있습니다.

        Realm Flowable은 항상 라이브 Realm을 보유한 스레드에서 항목을 방출합니다. 즉, 추가 처리를 수행해야 하는 경우 계산 스케줄러에서 값을 관찰하는 것이 좋습니다.

        realm.asFlowable() .observeOn(Schedulers.computation()) .map(rxRealm -> doExpensiveWork(rxRealm)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( ... );

        asFlowable() 에서 항목 방출을 중지하려면 first() 연산자를 사용하여 첫 번째 항목만 방출하도록 RxJava에 지시할 수 있습니다.

         
         realm.asFlowable().first().subscribe( ... ); // You only get the results once
         
         
        반환합니다:
        onNext 만 호출하는 RxJava Observable입니다. 절대 onComplete 또는 OnError 를 호출하지 않습니다.
        다음도 참조하세요.
        RxJava 및 Realm
      • isEmpty

        공개 부울 isEmpty()
        Realm 에 객체가 포함되어 있는지 확인합니다.
        반환합니다:
        true 비어 있으면 @{code false}, 그렇지 않으면 @{code false} .
      • getSchema

        public RealmSchema getSchema()
        이 Realm의 변경 가능한 스키마를 반환합니다.
        반환합니다:
        이 Realm의 RealmSchema 입니다.
      • 동결

        public DynamicRealm 동결()
        현재 Realm의 동결된 스냅샷을 반환합니다. 이 Realm은 IllegalStateException 발생 없이 모든 스레드에서 읽고 쿼리할 수 있습니다. 동결된 Realm에는 자체 수명 주기가 있으며 Closeable.close() 호출하여 닫을 수 있지만 동결된 사본을 생성한 Realm을 완전히 닫으면 동결된 Realm도 닫힙니다.

        동결된 데이터는 정상적으로 쿼리할 수 있지만 어떤 방식으로든 데이터를 변경하려고 하거나 리스너를 등록하려고 하면 IllegalStateException 이(가) 발생합니다.

        참고: 버전이 다른 많은 수의 Realm을 활성 상태로 유지하면 Realm의 파일 크기에 부정적인 영향을 미칠 수 있습니다. 이러한 상황을 방지하기 위해 RealmConfiguration.Builder.maxNumberOfActiveVersions(long) 을 설정할 수 있습니다.

        반환합니다:
        이 Realm의 동결된 사본입니다.
      • setAutoRefresh

        public void setAutoRefresh​(boolean autoRefresh)
        Realm 인스턴스의 자동 새로 고침 상태를 설정합니다.

        자동 새로 고침은 다른 스레드에서 동일한 파일에서 작동하는 Realm에서 커밋이 수행될 때 현재 Realm 인스턴스와 모든 파생 객체(RealmResults 및 RealmObject 인스턴스)를 자동으로 업데이트할 수 있는 기능입니다. 이 기능은 Realm 인스턴스가 Looper 활성화된 스레드에 있는 경우에만 사용할 수 있습니다.

        매개변수:
        autoRefresh - true 은 자동 새로 고침을 켜고 false 은 끕니다.
        예외 처리:
        IllegalStateException - 이벤트 루프가 아닌 스레드에서 호출된 경우.
      • isAutoRefresh

        공개 부울 isAutoRefresh()
        Realm 인스턴스의 자동 새로 고침 상태를 검색합니다.
        반환합니다:
        자동 새로 고침 상태.
      • 새로 고침

        public void refresh()
        Realm 인스턴스와 해당 인스턴스에서 오는 모든 RealmResults 및 RealmObjects 인스턴스를 새로 고칩니다. 또한 필요한 경우 Realm과 연결된 모든 리스너를 호출합니다.

        경고: 비동기 쿼리가 있는 스레드에서 이 메서드를 호출하면 해당 쿼리가 동기 쿼리로 바뀝니다. 즉, 을 와 함께 사용하여 Realm 인스턴스를 얻은 경우 이 메서드는 RealmException RealmConfiguration.Builder.allowQueriesOnUiThread(boolean) 을 발생시킵니다.true 대부분의 경우 이 방법을 사용하는 것보다 주어진 스레드에서 Realm의 변경 사항에 대한 알림을 받으려면 RealmChangeListener을 사용하는 것이 좋습니다.

        예외 처리:
        IllegalStateException - 트랜잭션 내에서 새로고침을 시도하는 경우.
        RealmException - RealmConfiguration.Builder.allowQueriesOnUiThread(boolean) 를 통해 옵트아웃한 후 UI 스레드에서 호출한 경우
      • isInTransaction

        공개 부울 isInTransaction()
        Realm이 현재 트랜잭션 중에 있는지 확인합니다.
        반환합니다:
        true 트랜잭션 내에 있으면 false 를 반환합니다.
      • writeCopyTo

        public void writeCopyTo​(File destination)
        Realm의 압축된 복사본을 지정된 대상 파일에 씁니다. 결과 파일은 다른 장치에서 로컬 또는 동기화된 Realm을 부트스트랩하기 위한 초기 데이터 세트로 사용할 수 있습니다.

        대상 파일이 이미 존재할 수 없습니다.

        트랜잭션 내에서 호출하면 마지막 트랜잭션이 커밋될 때의 데이터가 아니라 현재 데이터를 기록합니다.

        매개변수:
        destination - Realm을 저장할 파일입니다.
        예외 처리:
        IllegalArgumentException - 대상 인수가 null인 경우.
        RealmFileException - 기본 Realm 파일에 액세스하거나 대상 파일에 쓸 때 오류가 발생한 경우
        IllegalStateException - UI 스레드에서 호출된 경우.
        IllegalStateException - 모든 클라이언트 변경 사항이 서버에 통합되지 않은 경우.
      • writeEncryptedCopyTo

        public void writeEncryptedCopyTo​(File destination,
                                         byte[] key)
        Realm의 압축되고 암호화된 복사본을 지정된 대상 파일에 씁니다. 결과 파일은 다른 장치에서 로컬 또는 동기화된 Realm을 부트스트랩하기 위한 초기 데이터 세트로 사용할 수 있습니다.

        대상 파일이 이미 존재할 수 없습니다.

        트랜잭션 내에서 호출하면 마지막 트랜잭션이 커밋될 때의 데이터가 아니라 현재 데이터를 기록합니다.

        매개변수:
        destination - Realm을 저장할 파일입니다.
        key - 64바이트 암호화 키.
        예외 처리:
        IllegalArgumentException - 대상 인수가 null인 경우.
        RealmFileException - 기본 Realm 파일에 액세스하거나 대상 파일에 쓸 때 오류가 발생한 경우
        IllegalStateException - UI 스레드에서 호출된 경우.
        IllegalStateException - 모든 클라이언트 변경 사항이 서버에 통합되지 않은 경우.
      • waitForChange

        @Deprecated
        공개 부울 waitForChange()
        더 이상 사용되지 않습니다.
        이 메서드는 다음 주요 릴리스에서 제거될 예정입니다.
        Blocks the current thread until new changes to the Realm are available or stopWaitForChange() is called from another thread. stopWaitForChange가 호출되면 이후의 이 메서드에 대한 모든 호출은 즉시 false를 반환합니다.
        반환합니다:
        true Realm이 최신 버전으로 업데이트된 경우 false ,stopWaitForChange를 호출하여 취소된 경우.
        예외 처리:
        IllegalStateException - 트랜잭션 내에서 또는 루퍼 스레드에서 호출하는 경우.
        RealmMigrationNeededException - 최신 버전에 호환되지 않는 스키마 변경이 포함된 경우 Realm 를 입력합니다.
      • stopWaitForChange

        @Deprecated
        public void stopWaitForChange()
        더 이상 사용되지 않습니다.
        이 메서드는 다음 주요 릴리스에서 제거될 예정입니다.
        현재 waitForChange()false 을 즉시 반환하도록 합니다. 이 함수가 호출되면 이후의 모든 waitForChange 호출은 즉시 false 을 반환합니다.

        이 메서드는 스레드로부터 안전하며 이 메서드는 waitForChange를 호출한 스레드가 아닌 다른 스레드에서만 호출해야 합니다.

        예외 처리:
        IllegalStateException - Realm 인스턴스가 이미 닫힌 경우.
      • startTransaction

        public void beginTransaction()
        BaseRealm.commitTransaction() 에 의해 닫히거나 BaseRealm.cancelTransaction() 에 의해 중단되어야 하는 트랜잭션을 시작합니다. 트랜잭션은 Realm 내에서 객체를 원자적으로 생성, 업데이트 및 삭제하는 데 사용됩니다.

        트랜잭션을 시작하기 전에 Realm 인스턴스는 다른 스레드의 모든 변경 사항을 포함하기 위해 최신 버전으로 업데이트됩니다. 이 업데이트는 등록된 RealmChangeListener 을(를) trigger하지 않습니다.

        따라서 트랜잭션 내부에서 수정해야 하는 항목을 쿼리하는 것이 좋습니다. 그렇지 않으면 트랜잭션이 시작될 때 일부 결과가 삭제되거나 수정될 위험이 있습니다.

         
         // Don't do this
         RealmResults<Person> persons = realm.where(Person.class).findAll();
         realm.beginTransaction();
         persons.first().setName("John");
         realm.commitTransaction();
        
         // Do this instead
         realm.beginTransaction();
         RealmResults<Person> persons = realm.where(Person.class).findAll();
         persons.first().setName("John");
         realm.commitTransaction();
         
         

        참고: 트랜잭션을 중첩하는 것은 불가능합니다. 트랜잭션 내에서 트랜잭션을 시작하면 예외가 발생합니다.

        예외 처리:
        RealmMigrationNeededException - 최신 버전에 호환되지 않는 스키마 변경이 포함된 경우 Realm 를 입력합니다.
      • commitTransaction()

        public void commitTransaction()
        BaseRealm.beginTransaction() 이후의 모든 변경 사항은 디스크에 유지되며 Realm은 읽기 전용으로 되돌아갑니다. 다른 모든 Realm 인스턴스에 변경 사항이 발생했음을 알리기 위해 이벤트가 전송됩니다. 이벤트가 수신되면 다른 Realm은 해당 객체와 RealmResults 을(를) 업데이트하여 이 커밋의 변경 사항을 반영합니다.
      • 취소 트랜잭션

        public void cancelTransaction()
        현재 쓰기 트랜잭션(write transaction)에서 이루어진 모든 쓰기(생성, 업데이트 또는 삭제된 객체)를 되돌리고 트랜잭션을 종료합니다.

        Realm이 읽기 전용으로 돌아갑니다.

        트랜잭션 중이 아닐 때 이 함수를 호출하면 예외가 발생합니다.

      • IsFrozen

        공개 부울 isFrozen()
        이 Realm이 동결되었는지 여부를 반환합니다.
        반환합니다:
        true Realm이 동결된 경우 false 을 반환합니다.
        다음도 참조하세요.
        freeze()
      • getNumberOfActiveVersions

        public long getNumberOfActiveVersions()
        이 Realm에서 현재 보유하고 있는 활성 버전의 현재 수를 반환합니다.

        활성 버전이 많으면 Realm 파일의 크기에 부정적인 영향을 미칩니다. 자세한 내용 은 FAQ 를 참조하세요.

        반환합니다:
        현재 Realm에서 보유 중인 활성 버전의 수입니다.
        다음도 참조하세요.
        RealmConfiguration.Builder.maxNumberOfActiveVersions(long)
      • getPath

        public String getPath()
        이 Realm이 디스크에서 유지되는 표준 경로를 반환합니다.
        반환합니다:
        Realm 파일의 표준 경로입니다.
        다음도 참조하세요.
        File.getCanonicalPath()
      • getVersion

        public long getVersion()
        이 Realm의 스키마 버전을 반환합니다.
        반환합니다:
        이 Realm을 지원하는 Realm 파일의 스키마 버전입니다.
      • 닫기

        public void close()
        Realm 인스턴스와 인스턴스의 모든 리소스를 닫습니다.

        메모리, 파일 디스크립터가 유출되거나 Realm 파일의 크기가 측정 이상으로 커지지 않도록 작업을 완료한 후에는 Realm 인스턴스를 닫는 것을 항상 기억하는 것이 중요합니다.

        다음에 의해 지정됩니다:
        close 인터페이스에서 AutoCloseable
        다음에 의해 지정됩니다:
        close 인터페이스에서 Closeable
        예외 처리:
        IllegalStateException - 다른 스레드에서 닫으려고 하는 경우.
      • isClosed

        public 부울 isClosed()
        Realm 인스턴스가 이미 닫혔는지 확인합니다.
        반환합니다:
        true 닫히면 false , 그렇지 않으면 .
        예외 처리:
        IllegalStateException - 다른 스레드에서 닫으려고 하는 경우.
      • getSubscriptions

        public SubscriptionSet getSubscriptions()
        이 Realm과 연결된 구독 세트를 반환합니다. 구독 세트는 이 영역과 서버 간에 동기화되는 데이터를 정의하는 쿼리 세트를 정의합니다.

        이 방법은 flexible sync를 사용하는 동기화된 영역에만 적용할 수 있습니다.

        반환합니다:
        이 영역과 연결된 구독 세트입니다.
        예외 처리:
        IllegalStateException - 이 영역이 로컬 영역 또는 파티션 기반 동기화 영역인 경우
      • deleteAll

        public void deleteAll()
        이 Realm에서 모든 객체를 삭제합니다.
        예외 처리:
        IllegalStateException - Realm이 닫히거나 잘못된 스레드에서 호출된 경우