Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

类 RealmObject

在此页面上

  • io.realm
  • 构造函数
  • 方法摘要
  • 继承方法
  • 构造函数详细信息
  • 方法详细信息
  • addChangeListener
  • asChangesetObservable
  • asFlowable
  • deleteFromRealm
  • 冻结
  • getRealm
  • IsFrozen
  • isLoaded
  • isManaged
  • isValid
  • 负载
  • 删除所有变更监听器
  • removeChangeListener
java.lang.Object
io.realm.RealmObject

实现的接口:

  • io.realm.RealmModel

在 Realm 中,您可以通过子类化 RealmObject 并添加要持久化的字段来定义 RealmObject 类。 然后,您在 Realm 中创建对象,并使用自定义子类,而不是直接使用 RealmObject 类。注解处理器将为您的 RealmObject 子类创建代理类。

支持以下字段数据类型:

  • boolean/Boolean

  • 短/短

  • int/Integer

  • long/Long

  • float/Float

  • double/Double

  • 字节[]

  • 字符串

  • Date

  • UUID

  • org.bson.types.Decimal128

  • org.bson.types.ObjectId

  • 任何 RealmObject 子类

  • RealmList

  • RealmDictionary

当存储在 Realm 中时,类型 shortintlong会映射到long

RealmObject 的唯一限制是字段不能为 final 或 易失性。 允许使用任何方法和公共字段。 提供自定义构造函数时,必须声明一个不带参数的公共构造函数。

使用io.realm.annotations.Ignore注解的字段没有这些限制,也不需要 getter 或 setter。

Realm 将为使用io.realm.annotations.Index注解的字段创建索引。 这会加快查询速度,但会对插入和更新产生负面影响。

RealmObject 不能在不同线程之间传递。

提示

另请参阅:

构造函数和描述
修饰符和类型
方法和说明
public static void

向 RealmObject 添加变更侦听器,如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发该变更侦听器。

public static void

向 RealmObject 添加变更侦听器以获取有关变更的详细信息。

public final void

在此 RealmObject 中添加一个变更侦听器,如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发该变更侦听器。

public final void

向此 RealmObject 添加变更侦听器,以获取有关变更的详细信息。

public static <any>
E object
)

返回一个 Rx Observable,用于监控此 RealmObject 的变更。

public final <any>

返回一个 Rx Observable,用于监控此 RealmObject 的变更。

public static <any>
E object
)

返回一个监控此 RealmObject 变更的 RxJava Flowable。

public final <any>
asFlowable <E >()

返回一个监控此 RealmObject 变更的 RxJava Flowable。

public static void
E object
)

从当前关联的 Realm 中删除对象。

public final void

从当前关联的 Realm 中删除对象。

public static E
freeze <E >(
E object
)

返回此对象的冻结快照。

public final E
freeze <E >()

返回此对象的冻结快照。

public static Realm

返回model所属的Realm实例。

公共Realm

返回此 RealmObject 所属的 Realm 实例。

public static boolean
isFrozen <E >(
E object
)

返回此 RealmObject 是否被冻结。

public final boolean

返回此 RealmObject 是否被冻结。

public static boolean
isLoaded <E >(
E object
)

检查用于查找此 RealmObject 的查询是否已完成。

public final boolean

检查用于查找此 RealmObject 的查询是否已完成。

public static boolean
isManaged <E >(
E object
)

检查此对象是否由 Realm 托管。

公共布尔值

检查此对象是否由 Realm 托管。

public static boolean
isValid <E >(
E object
)

检查 RealmObject 是否仍可有效使用,即 RealmObject 未被删除, io.realm.Realm 未被关闭。

public final boolean

检查 RealmObject 是否仍可有效使用,即 RealmObject 未被删除, io.realm.Realm 未被关闭。

public static boolean
load <E >(
E object
)

使异步查询阻塞。

public final boolean
load ()

使异步查询阻塞。

public static void

从给定 RealmObject 中删除所有已注册的侦听器。

public final void

删除所有已注册的侦听器。

public static void

删除先前在给定 RealmObject 上注册的侦听器。

public static void

删除先前在给定 RealmObject 上注册的侦听器。

public final void

删除以前注册的侦听器。

public final void

删除以前注册的侦听器。

  • 从类 java.lang.Object 继承的方法 :getClasshashCodeequalsclonetoStringnotifynotifyAllwaitwaitwaitfinalize

public RealmObject ()

public static void addChangeListener <E >(
)

向 RealmObject 添加变更侦听器,如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发该变更侦听器。注册变更侦听器不会阻止底层 RealmObject 被垃圾收集。 如果对 RealmObject 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

public class MyActivity extends Activity {
private Person person; // Strong reference to keep listeners alive
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
person = realm.where(Person.class).findFirst();
person.addChangeListener(new RealmChangeListener<Person>() {
@Override
public void onChange(Person person) {
// React to change
}
});
}
}

参数

  • object — 要向其添加侦听器的 RealmObject。

  • listener - 要通知的变更侦听器。

抛出异常

public static void addChangeListener <E >(
)

向 RealmObject 添加变更侦听器以获取有关变更的详细信息。 如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发监听器。注册变更监听器不会阻止底层 RealmObject 被垃圾收集。 如果对 RealmObject 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

public class MyActivity extends Activity {
private Person person; // Strong reference to keep listeners alive
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
person = realm.where(Person.class).findFirst();
person.addChangeListener(new RealmObjectChangeListener<Person>() {
@Override
public void onChange(Person person, ObjectChangeSet changeSet) {
// React to change
}
});
}
}

参数

  • object — 要向其添加侦听器的 RealmObject。

  • listener - 要通知的变更侦听器。

抛出异常

public final void addChangeListener <E >(
)

在此 RealmObject 中添加变更侦听器,如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发该侦听器。注册变更侦听器不会阻止底层 RealmObject 被垃圾收集。 如果对 RealmObject 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

public class MyActivity extends Activity {
private Person person; // Strong reference to keep listeners alive
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
person = realm.where(Person.class).findFirst();
person.addChangeListener(new RealmChangeListener<Person>() {
@Override
public void onChange(Person person) {
// React to change
}
});
}
}

参数

  • listener - 要通知的变更侦听器。

抛出异常

向此 RealmObject 添加变更侦听器,以获取有关变更的详细信息。 如果任何值字段或引用的 RealmObject 字段发生更改,或者 RealmList 字段本身发生更改,则会触发监听器。注册变更监听器不会阻止底层 RealmObject 被垃圾收集。 如果对 RealmObject 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

public class MyActivity extends Activity {
private Person person; // Strong reference to keep listeners alive
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
person = realm.where(Person.class).findFirst();
person.addChangeListener(new RealmObjectChangeListener<Person>() {
@Override
public void onChange(Person person, ObjectChangeSet changeSet) {
// React to change
}
});
}
}

参数

  • listener - 要通知的变更侦听器。

抛出异常

public static <any> asChangesetObservable <E >(
E object
)

返回一个 Rx Observable,用于监控此 RealmObject 的变更。 订阅时,它将发出当前 RealmObject。 每次更新 RealmObject 时,都会发送由 RealmObject 和ObjectChangeSet组成的对。 首次发出 RealmObject 时,变更集将为null

RealmObject 在更新时会不断发出 - onComplete将永远不会被调用。

从 Realm Observables 发出的项目被冻结(请参阅冻结() 。 这意味着它们是不可变的,可以在任何线程上读取。

Realm Observables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:

obj.asChangesetObservable()
.observeOn(Schedulers.computation())
.map((rxObj, changes) -> doExpensiveWork(rxObj, changeså))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

参数

  • object - 正在观察的 RealmObject 类。 必须是此类或其超类型。

返回:

仅调用onNext的 RxJava Observable。 它永远不会调用onCompleteOnError

抛出异常

提示

另请参阅:

public final <any> asChangesetObservable <E >()

返回一个 Rx Observable,用于监控此 RealmObject 的变更。 订阅时,它将发出当前 RealmObject。 每次更新 RealmObject 时,都会发送由 RealmObject 和ObjectChangeSet组成的对。 首次发出 RealmObject 时,变更集将为null

RealmObject 在更新时会不断发出 - onComplete将永远不会被调用。

从 Realm Observables 发出的项目被冻结(请参阅冻结() 。 这意味着它们是不可变的,可以在任何线程上读取。

Realm Observables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:

obj.asChangesetObservable()
.observeOn(Schedulers.computation())
.map((rxObj, changes) -> doExpensiveWork(rxObj, changeså))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

返回:

仅调用onNext的 RxJava Observable。 它永远不会调用onCompleteOnError

抛出异常

提示

另请参阅:

public static <any> asFlowable <E >(
E object
)

返回一个监控此 RealmObject 变更的 RxJava Flowable。 订阅时,它将发出当前对象。 更新 RealmObject 时将不断发出对象更新 — 永远不会调用onComplete

链接 RealmObject 可观察量时,请使用obj.<MyRealmObjectClass>asFlowable()传递类型信息,否则以下可观察量的类型将为RealmObject

从 Realm Flowables 发出的项被冻结(请参阅冻结() 。 这意味着它们是不可变的,可以在任何线程上读取。

Realm Flowables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:

obj.asFlowable()
.observeOn(Schedulers.computation())
.map((rxObj) -> doExpensiveWork(rxObj))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

如果希望asFlowable()停止发出项目,可以使用first()操作符指示 RxJava 仅发出第一项:

obj.asFlowable()
.filter(obj -> obj.isLoaded())
.first()
.subscribe( ... ) // You only get the object once

参数

  • object - 正在观察的 RealmObject 类。 必须是此类或其超类型。

返回:

仅调用onNext的 RxJava Observable。 它永远不会调用onCompleteOnError

抛出异常

提示

另请参阅:

public final <any> asFlowable <E >()

返回一个监控此 RealmObject 变更的 RxJava Flowable。 订阅时,它将发出当前对象。 更新 RealmObject 时将不断发出对象更新 — 永远不会调用onComplete

链接 RealmObject flowable 时,请使用obj.<MyRealmObjectClass>asFlowable()传递类型信息,否则以下可观察量的类型将为RealmObject

从 Realm Flowables 发出的项被冻结(请参阅冻结() 。 这意味着它们是不可变的,可以在任何线程上读取。

Realm Flowables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:

obj.asFlowable()
.observeOn(Schedulers.computation())
.map((rxObj) -> doExpensiveWork(rxObj))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

如果希望asFlowable()停止发出项目,可以使用first()操作符指示 RxJava 仅发出第一项:

obj.asFlowable()
.filter(obj -> obj.isLoaded())
.first()
.subscribe( ... ) // You only get the object once

类型参数

  • E - 正在观察的 RealmObject 类。 必须是此类或其超类型。

返回:

仅调用onNext的 RxJava Observable。 它永远不会调用onCompleteOnError

抛出异常

提示

另请参阅:

public static void deleteFromRealm <E >(
E object
)

从当前与之关联的 Realm 中删除对象。调用此方法后,该对象将无效,对其执行的任何操作(读取或写入)都将失败,并抛出 IllegalStateException。

抛出异常

提示

另请参阅:

public final void deleteFromRealm ()

从当前关联的 Realm 中删除对象。调用此方法后,该对象将无效,对其执行的任何操作(读取或写入)都将失败,并抛出 IllegalStateException。

抛出异常

提示

另请参阅:

public static E freeze <E >(
E object
)

返回此对象的冻结快照。 可以从任何线程读取和查询冻结的副本,而不会引发 IllegalStateException

冻结 RealmObject 还会创建一个具有自己的生命周期的冻结 Realm,但如果生成原始collection的活动 Realm 完全关闭(即 所有线程上的所有实例均已关闭),冻结的 Realm 和对象也将关闭。

可以照常查询冻结对象,但尝试以任何方式对其进行更改或尝试注册侦听器都会引发 IllegalStateException

注意:让大量不同版本的冻结对象保持活动状态可能会对 Realm 的文件大小产生负面影响。 为了避免这种情况,可以设置RealmConfiguration.Builder.maxNumberOfActiveVersions(long)

返回:

此对象的冻结副本。

抛出异常

public final E freeze <E >()

返回此对象的冻结快照。 可以从任何线程读取和查询冻结的副本,而不会引发 IllegalStateException

冻结 RealmObject 还会创建一个具有自己的生命周期的冻结 Realm,但如果生成原始collection的活动 Realm 完全关闭(即 所有线程上的所有实例均已关闭),冻结的 Realm 和对象也将关闭。

可以照常查询冻结对象,但尝试以任何方式对其进行更改或尝试注册侦听器都会引发 IllegalStateException

注意:让大量不同版本的冻结对象保持活动状态可能会对 Realm 的文件大小产生负面影响。 为了避免这种情况,可以设置RealmConfiguration.Builder.maxNumberOfActiveVersions(long)

返回:

此对象的冻结副本。

抛出异常

public static Realm getRealm (
)

返回model所属的Realm实例。

不得调用Realm.close() 针对返回的实例。

参数

返回:

model所属的Realm实例;如果model为非托管,则为null

抛出异常

public Realm getRealm ()

返回此 RealmObject 所属的 Realm 实例。

不得调用Realm.close() 针对返回的实例。

返回:

此对象所属的Realm实例,如果此对象为非托管对象,则为null

抛出异常

public static boolean isFrozen <E >(
E object
)

返回此 RealmObject 是否被冻结。

返回:

true 如果 RealmObject 已冻结,否则为false

提示

另请参阅:

public final boolean isFrozen ()

返回此 RealmObject 是否被冻结。

返回:

true 如果 RealmObject 已冻结,否则为false

提示

另请参阅:

public static boolean isLoaded <E >(
E object
)

检查用于查找此 RealmObject 的查询是否已完成。RealmQuery.findFirstAsync()等异步方法会返回一个表示RealmQuery未来结果的RealmObject 。 它可以被认为类似于 java.util.concurrent.Future 在这方面。

一旦isLoaded()返回true ,即使查询未找到与查询参数匹配的任何对象,该对象也会表示查询结果。 在这种情况下, RealmObject将成为“空”对象。

“Null”对象表示null 。 调用任何访问器都会引发异常,因此在调用任何方法之前检查isValid()非常重要。 一种常见的模式是:

Person person = realm.where(Person.class).findFirstAsync();
RealmObject.isLoaded(person); // == false
RealmObject.addChangeListener(person, new RealmChangeListener() {
@Override
public void onChange(Person person) {
RealmObject.isLoaded(person); // always true here
if (RealmObject.isValid(person)) {
// It is safe to access the person.
}
}
});

根据定义,同步 RealmObject 是阻塞的,因此此方法将始终为其返回true 。 如果对非托管对象(在 Realm 外部创建)调用,此方法将返回true

参数

  • object - 要检查的 RealmObject。

返回:

true 如果查询已完成,则如果查询正在进行,则为false

提示

另请参阅:

public final boolean isLoaded ()

检查用于查找此 RealmObject 的查询是否已完成。RealmQuery.findFirstAsync()等异步方法会返回一个表示RealmQuery未来结果的RealmObject 。 它可以被认为类似于 java.util.concurrent.Future 在这方面。

一旦isLoaded()返回true ,即使查询未找到与查询参数匹配的任何对象,该对象也会表示查询结果。 在这种情况下, RealmObject将成为“空”对象。

“Null”对象表示null 。 调用任何访问器都会引发异常,因此在调用任何方法之前检查isValid()非常重要。 一种常见的模式是:

Person person = realm.where(Person.class).findFirstAsync();
person.isLoaded(); // == false
person.addChangeListener(new RealmChangeListener() {
@Override
public void onChange(Person person) {
person.isLoaded(); // Always true here
if (person.isValid()) {
// It is safe to access the person.
}
}
});

根据定义,同步 RealmObject 是阻塞的,因此此方法将始终为其返回true 。 如果对非托管对象(在 Realm 外部创建)调用,此方法将返回true

返回:

true 如果查询已完成,则如果查询正在进行,则为false

提示

另请参阅:

public static boolean isManaged <E >(
E object
)

检查此对象是否由 Realm 托管。 托管对象只是底层 Realm 文件中数据的包装器。 在 Looper 线程上,托管对象将实时更新,因此它始终指向最新数据。 可以使用addChangeListener(RealmModel, RealmChangeListener)注册变更监听器,以便在发生更改时收到通知。 托管对象具有线程限制,因此除了创建它们的线程之外,其他线程无法访问它们。

如果此方法返回false ,则该对象为非托管对象。 非托管对象只是一个普通的 Java 对象,因此可以跨线程自由解析,但对象中的数据未连接到底层 Realm,因此不会实时更新。

可以使用Realm.copyToRealm(RealmModel, ImportFlag...)从非托管对象创建托管对象。 可以使用Realm.copyFromRealm(RealmModel)从托管对象创建非托管对象。

返回:

true 如果对象为托管对象,则为false ,如果为非托管对象。

public boolean isManaged ()

检查此对象是否由Realm托管。 托管对象只是根本的Realm 文件中数据的包装器。 在 Looper 线程上,托管对象将实时更新,因此它始终指向最新数据。 可以使用addChangeListener(RealmChangeListener)注册变更监听器,以便在发生更改时收到通知。 托管对象具有线程限制,因此除了创建它们的线程之外,其他线程无法访问它们。

如果此方法返回false ,则该对象为非托管对象。 非托管对象只是一个普通的 Java 对象,因此可以跨线程自由解析,但对象中的数据未连接到底层 Realm,因此不会实时更新。

可以使用Realm.copyToRealm(RealmModel, ImportFlag...)从非托管对象创建托管对象。 可以使用Realm.copyFromRealm(RealmModel)从托管对象创建非托管对象。

返回:

true 如果对象为托管对象,则为false ,如果为非托管对象。

public static boolean isValid <E >(
E object
)

检查 RealmObject 是否仍可有效使用,即 RealmObject 未被删除, io.realm.Realm 未被关闭。 对于非托管对象,它将始终返回true

参数

  • object — 要检查其有效性的 RealmObject。

返回:

true 如果该对象仍可访问或是为非托管对象,则为false

public final boolean isValid ()

检查 RealmObject 是否仍可有效使用,即 RealmObject 未被删除, io.realm.Realm 未被关闭。 对于非托管对象,它将始终返回true

请注意,这可用于检查某些条件的有效性,例如在满足条件时是否为null

realm.where(BannerRealm.class).equalTo("type", type).findFirstAsync().asFlowable()
.filter(result.isLoaded() && result.isValid())
.first()

返回:

true 如果该对象仍可访问或是为非托管对象,则为false

public static boolean load <E >(
E object
)

使异步查询阻塞。 这也会trigger所有已注册的侦听器。注意: 如果针对非托管对象(在 Realm 外部创建)调用,将返回true

参数

  • object - 用于强制加载的 RealmObject。

返回:

true 如果成功完成查询,则为false

public final boolean load ()

使异步查询阻塞。 这也会trigger所有已注册的侦听器。注意: 如果针对非托管对象(在 Realm 外部创建)调用,将返回true

返回:

true 如果成功完成查询,则为false

public static void removeAllChangeListeners <E >(
E object
)

从给定 RealmObject 中删除所有已注册的侦听器。

参数

  • object - 要从中删除所有侦听器的 RealmObject。

抛出异常

public final void removeAllChangeListeners ()

删除所有已注册的侦听器。
public static void removeChangeListener <E >(
)

删除先前在给定 RealmObject 上注册的侦听器。

参数

  • object - 要从中删除侦听器的 RealmObject。

  • listener - 要删除的实例。

抛出异常

public static void removeChangeListener <E >(
)

删除先前在给定 RealmObject 上注册的侦听器。

参数

  • object - 要从中删除侦听器的 RealmObject。

  • listener - 要删除的实例。

抛出异常

删除以前注册的侦听器。

参数

  • listener - 要删除的实例。

抛出异常

删除以前注册的侦听器。

参数

  • listener - 要删除的实例。

抛出异常

后退

RealmModel