io.realm
Realm 类是对象持久存储的存储和事务管理器。 它负责创建 RealmObject 的实例。 Realm 中的对象可以随时查询和读取。 创建、修改和删除对象必须在事务内部完成。 请参阅executeTransaction(Transaction)
事务确保多个实例(在多个线程上)可以访问处于一致状态的相同对象,并具有完整的 ACID 保证。
请务必记住在使用Realm 实例后调用 close() 方法。否则可能会导致 java.lang.OutOfMemoryError,因为无法释放原生资源。
Realm实例不能跨不同线程使用。 这意味着您必须在要使用Realm的每个线程上打开一个实例。 Realm实例使用引用计数按线程自动缓存,因此只要引用计数未达到零,调用getInstance(RealmConfiguration)将仅返回缓存的Realm ,并且应被视为轻量级操作。
对于用户界面线程,这意味着打开和关闭Realms应发生在onCreate/onDestroy或onStart/onStop中。
Realm实例使用 android.os.Handler 机制跨线程协调其状态。这也意味着没有 android.os.Looper 的线程上的Realm实例无法接收更新,除非手动调用 refresh()。
在 Android 活动中使用 Realm 的标准模式如下所示:
public class RealmApplication extends Application { public void onCreate() { super.onCreate(); // The Realm file will be located in package's "files" directory. RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build(); Realm.setDefaultConfiguration(realmConfig); } } public class RealmActivity extends Activity { private Realm realm; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_main); realm = Realm.getDefaultInstance(); } protected void onDestroy() { super.onDestroy(); realm.close(); } }
Realm 支持最大包含 16 MB 的字符串和字节字段。
嵌套类摘要
修饰符和类型 | 类和描述 |
|---|---|
| |
|
字段摘要
修饰符和类型 | 字段和描述 |
|---|---|
公共静态最终字符串 | |
public static final int | 用于加密 Realm 数据的加密密钥所需的长度。 |
方法摘要
修饰符和类型 | 方法和说明 |
|---|---|
public void | 为 Realm 添加变更监听器。 |
public <any> | asFlowable () 返回一个监控此 Realm 变更的 RxJava Flowable。 |
public static boolean | 压缩 Realm 文件。 |
公用E | 为已持久化的RealmObject 创建非托管内存中副本。 |
公用E | 为已持久化的RealmObject 创建非托管内存中副本。 |
公共列表 | 为已持久化的 RealmObject 创建非托管内存中副本。 |
公共列表 | 为已持久化的 RealmObject 创建非托管内存中副本。 |
公共列表 | 将 RealmObject collection复制到 Realm 实例并返回其副本。 |
公用E | 将 RealmObject 复制到 Realm 实例并返回副本。 |
公共列表 | 更新由io.realm.annotations.PrimaryKey标识的现有 RealmObject 列表;如果找不到现有对象,则创建新副本。 |
公用E | 更新由同一io.realm.annotations.PrimaryKey标识的现有 RealmObject,如果找不到现有对象,则创建新副本。 |
public void | 为 JSON 数组中的每个对象创建一个 Realm 对象。 |
公用E | 实例化一个新的嵌入式对象并将其添加到 Realm 中。 |
公用E | 实例化一个新对象并将其添加到已设置主键值的 Realm 中。 |
公用E | 实例化一个新对象并将其添加到 Realm 中。 |
公用E | 创建一个预填充 JSON 对象数据的 Realm 对象。 |
public void | 尝试使用新的 JSON 数据更新由其主键标识的现有对象的列表。 |
公用E | 尝试使用新的 JSON 数据更新由主键定义的现有对象。 |
public void | 从 Realm 中删除指定类的所有对象。 |
public static boolean | 从文件系统中删除 Realm 文件以及由给定RealmConfiguration指定的相关临时文件。 |
public void | 在 Realm 上执行给定事务。 |
Realm.Transaction transaction, Realm.Transaction.OnSuccess onSuccess, Realm.Transaction.OnError onError ) 与executeTransactionAsync(Transaction) 类似,但也接受 OnSuccess 和 OnError 回调。 | |
与executeTransactionAsync(Transaction) 类似,但也接受 OnError回调。 | |
与executeTransactionAsync(Transaction) 类似,但也接受 OnSuccess回调。 | |
与executeTransaction(Transaction) 类似,但在工作线程上异步运行。 | |
公共Realm | freeze () 返回当前 Realm 的冻结快照。 |
public static Context | 获取使用Realm.init(Context) 或Realm .init(Context, string) 初始化Realm时使用的应用程序程序上下文。 |
public static RealmConfiguration | 返回 getDefaultInstance() 的默认配置。 |
public static Realm | Realm静态构造函数,返回 io.Realm 类定义的Realm 实例。通过 setDefaultConfiguration(RealmConfiguration)设立域 .RealmConfiguration |
返回默认 Realm 模块。 | |
public static int | 返回当前进程中使用此配置的所有线程中当前打开的 Realm 实例数。 |
public static Realm | Realm 静态构造函数,返回由提供的io.realm.RealmConfiguration定义的 Realm 实例 |
public static RealmAsyncTask | 在进程中创建每个RealmConfiguration的第一个 Realm 实例可能需要一些时间,因为此时所有初始化代码都需要运行(设置 Realm、验证模式和创建初始数据)。 |
public static int | 返回调用此方法的线程上当前打开的 Realm 实例数。 |
getSchema () 返回此 Realm 的模式。 | |
public static synchronized void | |
public static synchronized void | 初始化 Realm 库并创建可供使用的默认配置。 |
public void | 插入非托管 RealmObject。 |
public void | 插入非托管 RealmObject 的列表。 |
public void | 插入或更新非托管 RealmObject。 |
public void | 插入或更新非托管 RealmObject 列表。 |
公共布尔值 | isEmpty () 检查此io.realm.Realm 是否包含任何对象。 |
public static void | 手动Atlas Triggers RealmMigration 上的迁移。 |
public static void | 手动Atlas Triggers与给定 RealmConfiguration 关联的迁移。 |
public void | 删除所有用户定义的变更侦听器。 |
public void | 删除指定的变更侦听器。 |
public static void | 删除当前默认配置(如有)。 |
public static void | 设置 io. 域.RealmConfiguration 在调用 getDefaultInstance() 时使用。 |
返回类型化 RealmQuery,可用于查询该类型的特定对象 |
继承方法
从类 java.lang.Object 继承的方法:
getClass、hashCode、equals、clone、toString、notify、notifyAll、wait、wait、wait、finalize从类io.realm.BaseRealm继承的方法:
setAutoRefresh、isAutoRefresh、refresh、isInTransaction、addListener、removeListener、asFlowable、removeAllListeners、writeCopyTo、writeEncryptedCopyTo、waitForChange、stopWaitForChange、beginTransaction、commitTransaction、cancelTransaction、freeze、isFrozen、getNumberOfActiveVersions、checkIfValid、checkAllowQueriesOnUiThread、checkAllowWritesOnUiThread、checkIfInTransaction、checkIfValidAndInTransaction、getPath、getConfiguration、getVersion、close、isClosed、isEmpty、getSchema、getSubscriptions、deleteAll、migrateRealm、finalize
字段详细信息
DEFAULT_REALM_NAME
ENCRYPTION_KEY_LENGTH
用于加密 Realm 数据的加密密钥所需的长度。
方法详细信息
addChangeListener
向 Realm 添加变更监听器。此线程或另一个线程提交变更时将执行监听器。 Realm 实例是按线程单例运行并进行缓存的,因此即使调用close() ,也应手动删除监听器。 否则存在内存泄漏的风险。 参数
抛出异常
|
asFlowable
public <any> asFlowable () | ||||||
|---|---|---|---|---|---|---|
返回一个监控此 Realm 变更的 RxJava Flowable。 订阅时,它将发出当前状态。 随着 Realm 更新,项目将不断发出 - 从 Realm Flowables 发出的项被冻结(请参阅冻结() 。 这意味着它们是不可变的,可以在任何线程上读取。 Realm Flowables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值: 如果希望 返回: 仅调用 覆盖
|
compactRealm
压缩 Realm 文件。 Realm 文件通常包含可用/未使用的空间。 此方法会删除此可用空间,从而减小文件大小。 Realm 文件中的对象保持不变。在调用此方法之前,必须关闭文件,否则将返回 The file system should have free space for at least a copy of the Realm file. The Realm file is left untouched if any file operation fails. 参数
返回:
|
copyFromRealm
为已持久化的RealmObject 创建非托管内存中副本。 这是深度复制,可将所有引用的对象复制到定义的深度。 复制的对象均已与 Realm 分离,并且将不再自动更新。 这意味着复制的对象可能包含不再与其他托管 Realm 对象一致的数据。 *警告*:对复制对象的任何更改都可以使用 copyToRealmOrUpdate(RealmModel, ImportFlag...) 合并回Realm ,但所有字段都将被覆盖,而不仅仅是已更改的字段。这包括对其他对象的引用,即使它们可能由于到达 类型参数
参数
返回: 托管RealmObject的内存中分离副本。 抛出异常
|
为已持久化的RealmObject 创建非托管内存中副本。 这是一个深度复制,将复制所有引用的对象。 复制的对象均已与 Realm 分离,并且将不再自动更新。 这意味着复制的对象可能包含不再与其他托管 Realm 对象一致的数据。 *警告*:对复制对象的任何更改都可以使用 copyToRealmOrUpdate(RealmModel, ImportFlag...) 合并回Realm ,但所有字段都将被覆盖,而不仅仅是已更改的字段。这包括对其他对象的引用,并且可能会覆盖其他线程所做的更改。 可以使用 ImportFlag 修改此行为。 类型参数
参数
返回: 托管RealmObject的内存中分离副本。 抛出异常
|
为已持久化的 RealmObject 创建非托管内存中副本。 这是一个深度复制,会将所有引用的对象复制到定义的深度。复制的对象全部与 Realm 分离,并且不会再自动更新。 这意味着复制的对象可能包含不再与其他托管 Realm 对象一致的数据。 *警告*:对复制对象的任何更改都可以使用 copyToRealmOrUpdate(Iterable, ImportFlag...) 合并回Realm ,但所有字段都将被覆盖,而不仅仅是已更改的字段。这包括对其他对象的引用,即使它们可能由于到达 类型参数
参数
返回: RealmObjects 的内存中分离副本。 抛出异常
|
为已持久化的 RealmObject 创建非托管内存中副本。 这是一个深度复制,将复制所有引用的对象。复制的对象均会与 Realm 分离,并且将不再自动更新。 这意味着复制的对象可能包含不再与其他托管 Realm 对象一致的数据。 *警告*:对复制对象的任何更改都可以使用 copyToRealmOrUpdate(RealmModel, ImportFlag...) 合并回Realm ,但所有字段都将被覆盖,而不仅仅是已更改的字段。这包括对其他对象的引用,并且可能会覆盖其他线程所做的更改。 可以使用 ImportFlag 修改此行为。 类型参数
参数
返回: 托管 RealmObjects 的内存中分离副本。 抛出异常
|
copyToRealm
将 RealmObject collection复制到 Realm 实例并返回其copy。对原始 RealmObject 的任何进一步更改都不会反映在 Realm 副本中。 这是深度复制,即所有引用的对象都将被复制。 已在此 Realm 中的对象将被忽略。请注意,复制对象将复制所有字段值。 如果未提供,则对象和子对象中任何未设置的字段都将设置为其默认值。 参数
返回: 转换后的 RealmObject 列表,所有这些对象的属性均由 Realm 托管。 抛出异常
|
将 RealmObject 复制到 Realm 实例并返回副本。 对原始 RealmObject 的任何进一步更改都不会反映在 Realm 副本中。 这是一个深复制,因此所有引用的对象都将被复制。 已在此 Realm 中的对象将被忽略。请注意,复制对象将复制所有字段值。 如果未提供,则此对象和子对象中任何未设置的字段都将设置为其默认值。 参数
返回: 一个托管 RealmObject,其属性由 Realm 支持。 抛出异常
|
copyToRealmOrUpdate
更新由io.realm.annotations.PrimaryKey标识的现有 RealmObject 列表;如果找不到现有对象,则创建新副本。 这是深度复制或更新,即所有引用的对象都将被复制或更新。 请注意,复制对象将复制所有字段值。 如果未提供,则对象和子对象中任何未设置的字段都将设置为其默认值。 参数
返回: 所有新的或更新的 RealmObject 的列表。 抛出异常
|
更新由同一io.realm.annotations.PrimaryKey标识的现有 RealmObject,如果找不到现有对象,则创建新副本。 这是深度复制或更新,即所有引用的对象都将被复制或更新。 请注意,复制对象将复制所有字段值。 如果未提供,则对象和子对象中任何未设置的字段都将设置为其默认值。 参数
返回: 新的或更新的 RealmObject 及其由 Realm 支持的所有属性。 抛出异常
|
createAllFromJson
为 JSON 数组中的每个对象创建一个 Realm 对象。 这必须在事务中完成。具有未知属性的 JSON 属性将被忽略。 如果 JSON 对象中不存在RealmObject字段,则RealmObject字段将设置为该类型的默认值。 此方法目前不支持值列表字段。 参数
抛出异常
|
createEmbeddedObject
public E createEmbeddedObject <E >( ) |
|---|
实例化一个新的嵌入式对象并将其添加到 Realm。此方法只应用于创建标记为嵌入式的类型的对象。 参数
返回: 新创建的嵌入式对象。 抛出异常
|
createObject
实例化一个新对象并将其添加到已设置主键值的 Realm 中。如果该值违反了主键约束,则不会添加任何对象,并会抛出RealmException 。 模型类提供的主键默认值将被忽略。 参数
返回: 新对象。 抛出异常
|
实例化一个新对象并将其添加到Realm中。此方法仅适用于没有 @PrimaryKey 注解的模型类。 如果要创建具有主键}的对象,请改用 createObject(Class, Object) 或 copyToRealm(RealmModel, ImportFlag...)。 参数
返回: 新对象。 抛出异常
|
createObjectFromJson
创建一个预填充 JSON 对象数据的 Realm 对象。 这必须在事务中完成。 具有未知属性的 JSON 属性将被忽略。 如果 JSON 对象中不存在RealmObject字段,则RealmObject字段将设置为该类型的默认值。 此方法目前不支持值列表字段。 参数
返回: 创建的对象,如果未提供 JSON 数据,则为 抛出异常
提示
|
createOrUpdateAllFromJson
尝试使用新的 JSON 数据更新由其主键标识的现有对象的列表。 如果在 Realm 中找不到现有对象,则会创建一个新对象。 这必须在事务中进行。 如果更新对象时在 JSON 中未找到某个字段,则不会更新该字段。如果创建了新的RealmObject ,但在 JSON 对象中未找到某个字段,则将为该字段分配字段类型的默认值。 此方法目前不支持值列表字段。 参数
抛出异常
提示
|
createOrUpdateObjectFromJson
尝试使用新的 JSON 数据更新由主键定义的现有对象。 如果找不到现有对象,则 Realm 中将保存一个新对象。 这必须在事务中进行。 如果更新对象时在 JSON 中未找到某个字段,则不会更新该字段。如果创建了新的RealmObject ,但在 JSON 对象中未找到某个字段,则将为该字段分配字段类型的默认值。 此方法目前不支持值列表字段。 参数
返回: 创建或更新了域.RealmObject 。 抛出异常
提示
|
删除
deleteRealm
从文件系统中删除 Realm 文件以及由给定RealmConfiguration指定的相关临时文件。 带有“.lock”的临时文件 扩展不会被删除。 在调用此方法之前,必须关闭所有 Realm 实例。 警告:对于同步Realm ,即使关闭所有用户控制的Realm实例,背景线程上的内部Realm 实例也有可能未关闭。这将产生一个 参数
返回:
抛出异常
|
executeTransaction
在 Realm 上执行给定事务。 beginTransaction()和commitTransaction()将被自动调用。 如果在事务期间引发任何异常,将调用cancelTransaction()而不是commitTransaction() 。 从用户界面线程调用此方法会抛出 RealmException 异常。这样做可能会导致丢帧甚至 ANR。 我们建议从非用户界面线程中调用此方法,或改用executeTransactionAsync(Transaction)。 参数
抛出异常
|
executeTransactionAsync
public RealmAsyncTask executeTransactionAsync ( Realm.Transaction transaction, Realm.Transaction.OnSuccess onSuccess, Realm.Transaction.OnError onError ) |
|---|
与executeTransactionAsync(Transaction) 类似,但也接受 OnSuccess 和 OnError 回调。 参数
返回: 代表可取消任务的RealmAsyncTask 。 抛出异常
|
public RealmAsyncTask executeTransactionAsync ( Realm.Transaction transaction, Realm.Transaction.OnError onError ) |
|---|
与executeTransactionAsync(Transaction) 类似,但也接受 OnError回调。 参数
返回: 代表可取消任务的RealmAsyncTask 。 抛出异常
|
public RealmAsyncTask executeTransactionAsync ( Realm.Transaction transaction, Realm.Transaction.OnSuccess onSuccess ) |
|---|
与executeTransactionAsync(Transaction) 类似,但也接受 OnSuccess回调。 参数
返回: 代表可取消任务的RealmAsyncTask 。 抛出异常
|
与executeTransaction(Transaction) 类似,但在工作线程上异步运行。 参数
返回: 代表可取消任务的RealmAsyncTask 。 抛出异常
|
冻结
返回当前Realm的冻结快照。可以从任何线程读取和查询此Realm ,而不会引发 IllegalStateException。冻结的Realm有自己的生命周期,可以通过调用 close() 来关闭,但完全关闭生成冻结副本的Realm也会关闭冻结的Realm。 可以正常查询冻结数据,但尝试以任何方式更改数据或尝试注册任何侦听器都会引发IllegalStateException 。 注意:保持大量不同版本的 Realm 活动可能会对 Realm 的文件大小产生负面影响。 为了避免这种情况,可以设置RealmConfiguration.Builder.maxNumberOfActiveVersions(long) 。 返回: 此 Realm 的冻结副本。 覆盖
|
getApplicationContext
public static Context getApplicationContext () |
|---|
获取使用Realm.init(Context) 或Realm .init(Context, string) 初始化Realm时使用的应用程序程序上下文。 返回: 使用Realm.init(Context) 或Realm .init(Context, string) 初始化Realm时使用的应用程序程序上下文;如果尚未初始化Realm,则为 null。 |
getDefaultConfiguration
public static RealmConfiguration getDefaultConfiguration () |
|---|
getDefaultInstance
public static Realm getDefaultInstance () |
|---|
Realm静态构造函数,返回 io.Realm 类定义的Realm 实例。通过 setDefaultConfiguration(RealmConfiguration)设立域 .RealmConfiguration 返回: Realm 类的实例。 抛出异常
|
getDefaultModule
public static Object getDefaultModule () |
|---|
返回默认 Realm 模块。 该模块包含当前项目中的所有 Realm 类,但不包括来自库或项目依赖项的类。 其中的 Realm 类应使用自己的模块公开。 返回: 默认 Realm 模块,如果默认模块不存在,则为 抛出异常
|
getGlobalInstanceCount
返回当前进程中使用此配置的所有线程中当前打开的 Realm 实例数。 这包括动态 Realm 和普通 Realm。 参数
返回: 所有线程中打开的 Realm 实例数。 |
getInstance
Realm 静态构造函数,返回由提供的io.realm.RealmConfiguration定义的 Realm 实例 参数
返回: Realm 类的实例 抛出异常
|
getInstanceAsync
public static RealmAsyncTask getInstanceAsync ( RealmConfiguration configuration, Realm.Callback callback ) |
|---|
在进程中创建每个RealmConfiguration的第一个 Realm 实例可能需要一些时间,因为此时所有初始化代码都需要运行(设置 Realm、验证模式和创建初始数据)。 此方法将初始化工作放在背景线程中,并在初始化完成后将 Realm 实例异步传递给调用者线程。 参数
返回: 代表可取消任务的RealmAsyncTask 。 抛出异常
|
getLocalInstanceCount
返回调用此方法的线程上当前打开的 Realm 实例数。 这包括动态 Realm 和普通 Realm。 参数
返回: 调用者线程上打开的 Realm 实例数。 |
getSchema
public RealmSchema getSchema () |
|---|
返回此Realm的模式。模式不可变。任何对其进行修改的尝试都将导致 UnsupportedOperationException 异常。 只能使用DynamicRealm.getSchema()修改模式 或通过迁移。 返回: 此 Realm 的RealmSchema 。 覆盖
|
init
初始化Realm库并创建可供使用的默认配置。在与任何其他Realm API 交互之前,必须先调用此方法。 应用.Application 子类: 请记住将其注册到 参数
抛出异常
|
初始化Realm库并创建可供使用的默认配置。在与任何其他Realm API 交互之前,必须先调用此方法。 应用.Application 子类: 请记住将其注册到 参数
抛出异常
|
insert
插入非托管 RealmObject。 这通常比 copyToRealm(RealmModel, ImportFlag...) 更快,因为它不返回插入的元素,而是执行最少的分配和检查。插入后,对原始对象的任何更改都不会保留。 请注意:
如果您希望返回托管RealmObject,请使用 copyToRealm(RealmModel, ImportFlag...) ,否则,如果您有大量对象,此方法通常速度更快。 参数
抛出异常
|
插入非托管 RealmObject 的列表。 这通常比 copyToRealm(Iterable, ImportFlag...) 更快,因为它不返回插入的元素,并执行最少的分配和检查。插入后,对原始对象的任何更改都不会保留。 请注意:
如果您希望返回托管RealmObject,请使用 copyToRealm(Iterable, ImportFlag...) ,否则,如果您有大量对象,此方法通常速度更快。 参数
抛出异常
|
insertOrUpdate
插入或更新非托管 RealmObject。 这通常比 copyToRealmOrUpdate(RealmModel, ImportFlag...) 更快,因为它不返回插入的元素,而是执行最少的分配和检查。插入后,对原始对象的任何更改都不会保留。 请注意:
如果您希望返回托管RealmObject,请使用 copyToRealm(RealmModel, ImportFlag...) ,否则,如果您有大量对象,此方法通常速度更快。 参数
抛出异常
|
插入或更新非托管 RealmObject 列表。 这通常比 copyToRealmOrUpdate(Iterable, ImportFlag...) 更快,因为它不返回插入的元素,并执行最少的分配和检查。插入后,对原始对象的任何更改都不会保留。 请注意:
如果您希望返回托管RealmObject,请使用 copyToRealm(Iterable, ImportFlag...) ,否则,如果您有大量对象,此方法通常速度更快。 参数
抛出异常
|
isEmpty
public boolean isEmpty () |
|---|
migrateRealm
手动Atlas Triggers RealmMigration 上的迁移。 参数
抛出异常
|
手动Atlas Triggers与给定 RealmConfiguration 关联的迁移。如果 Realm 已经是最新版本,则不会发生任何情况。 参数
抛出异常
|
删除所有变更监听器
public void removeAllChangeListeners () |
|---|
removeChangeListener
删除指定的变更侦听器。 参数
抛出异常
|
removeDefaultConfiguration
public static void removeDefaultConfiguration () |
|---|
删除当前默认配置(如有)。 在使用 setDefaultConfiguration(RealmConfiguration)设立新的默认配置之前,对 getDefaultInstance() 的任何进一步调用都将失败。 |
setDefaultConfiguration
设置 io. 域.RealmConfiguration 在调用 getDefaultInstance() 时使用。 参数
抛出异常
|
WHERE
返回类型化 RealmQuery,可用于查询该类型的特定对象 参数
返回: 类型化 RealmQuery,可用于查询该类型的特定对象。 |