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

RealmResults 类

在此页面上

  • io.realm
  • 方法摘要
  • 继承方法
  • 方法详细信息
  • addChangeListener
  • asChangesetObservable
  • asFlowable
  • asJSON
  • 冻结
  • IsFrozen
  • isLoaded
  • 负载
  • 删除所有变更监听器
  • removeChangeListener
  • setBlob
  • setBoolean
  • setByte
  • setDate
  • setDecimal128
  • setDouble
  • setFloat
  • setInt
  • setList
  • setLong
  • setNull
  • setObject
  • setObjectId
  • setShort
  • setString
  • setUUID
  • setValue
  • sort
  • WHERE
java.lang.Object
io.realm.OrderedRealmCollectionImpl
io.realm.RealmResults

此类保存给定 Realm 的RealmQuery的所有匹配项。 这些对象不会从 Realm 复制到 RealmResults 列表,而只是从 RealmResult 引用。 这样可以节省内存并提高速度。

RealmResults 是实时视图,这意味着如果它位于Looper线程上,它将在提交事务后自动更新其查询结果。如果在非事件循环线程上,则必须调用Realm.refresh()来更新结果。

从 RealmResults 列表对 RealmObjects 的更新必须在事务中完成,并且修改的对象在提交事务期间将持久保存到 Realm 文件中。

RealmResults 对象不能在不同线程之间传递。

请注意,RealmResults 永远不会 null ,即使在它不包含对象的情况下也是如此。 应始终使用RealmResults.size() 方法来检查 RealmResults 是否为空。

如果通过RealmList.where()在 RealmList 上构建 RealmResults ,当源 RealmList 被删除时,它将变为空。

RealmResults包含的元素数量可以多于Integer.MAX_VALUE 。 在这种情况下,您只能访问其中的前Integer.MAX_VALUE元素。

提示

另请参阅:

修饰符和类型
方法和说明
public void
public void
public <any>

返回一个 Rx Observable,用于监控此 RealmResults 的更改。

public <any>

返回一个监控此 RealmResults 变更的 Rx Flowable。

公共string

返回RealmQuery匹配项的 JSON 表示形式。

公共布尔值
公共布尔值

如果尚未加载结果,则返回false如果已加载结果,则返回true

公共布尔值
load ()

使异步查询阻塞。

public void

删除所有用户定义的变更侦听器。

public void
public void
public void
String fieldName,
byte[] value
)

设置collection中所有对象的给定字段的二进制值。

public void
String fieldName,
boolean value
)

设置collection内所有对象中给定字段的boolean值。

public void
String fieldName,
byte value
)

设置collection内所有对象中给定字段的byte值。

public void
String fieldName,
Date value
)

设置collection内所有对象中给定字段的Date值。

public void
String fieldName,
Decimal128 value
)

设置collection内所有对象中给定字段的Decimal128值。

public void
String fieldName,
double value
)

设置collection内所有对象中给定字段的double值。

public void
String fieldName,
float value
)

设置collection内所有对象中给定字段的float值。

public void
String fieldName,
int value
)

设置collection内所有对象中给定字段的int值。

public void
setList <T >(
)

替换此collection中所有对象上给定字段的 RealmList。

public void
String fieldName,
long value
)

设置collection内所有对象中给定字段的long值。

public void
String fieldName
)

将collection中所有对象的给定字段的值设置为null

public void
String fieldName,
)

在collection所有对象中的给定字段上设置对另一个对象的引用。

public void
String fieldName,
ObjectId value
)

设置collection内所有对象中给定字段的ObjectId值。

public void
String fieldName,
short value
)

设置collection内所有对象中给定字段的short值。

public void
String fieldName,
String value
)

设置collection内所有对象中给定字段的String值。

public void
String fieldName,
UUID value
)

设置collection内所有对象中给定字段的UUID值。

public void
String fieldName,
Object value
)

更新查询结果内所有对象中由fieldName指定的字段。

String fieldName1,
Sort sortOrder1,
String fieldName2,
Sort sortOrder2
)

根据提供的字段和排序顺序对collection进行排序。

返回一个RealmQuery ,可用于从此collection中查询特定objects。

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

  • 从类 java.util.AbstractCollection 继承的方法 :iteratorsizeisEmptycontainstoArraytoArrayaddremovecontainsAlladdAllremoveAllretainAllclear ,toString

  • 从类 java.util.AbstractList 继承的方法 :addgetsetaddremoveindexOflastIndexOfclearaddAlliteratorlistIteratorlistIteratorsubListequalshashCoderemoveRange

  • 从类io.realm.OrderedRealmCollectionImpl继承的方法: isValidisManagedcontainsgetfirstfirstlastlastdeleteFromRealmdeleteAllFromRealmiteratorlistIteratorlistIteratorsortsortsortsortsizeminminDatemaxmaxDatesumaverageremoveremoveremoveAllsetretainAlldeleteLastFromRealmdeleteFirstFromRealmclearaddaddaddAlladdAllcreateSnapshotgetRealmgetCollectionOperator

向此RealmResults添加变更侦听器。

注册变更侦听器不会阻止底层 RealmResults 被垃圾收集。 如果对 RealmResults 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

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

参数

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

抛出异常

向此RealmResults添加变更侦听器。

注册变更侦听器不会阻止底层 RealmResults 被垃圾收集。 如果对 RealmResults 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。

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

参数

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

抛出异常

public <any> asChangesetObservable ()

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

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

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

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

realm.where(Foo.class).findAllAsync().asChangesetObservable()
.observeOn(Schedulers.computation())
.map((rxResults, changes) -> doExpensiveWork(rxResults, changes))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

返回:

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

抛出异常

提示

另请参阅:

public <any> asFlowable ()

返回一个监控此 RealmResults 变更的 Rx Flowable。 订阅时,它将发出当前的 RealmResults。 RealmResults 将在 RealmResults 更新时不断发出 - onComplete将永远不会被调用。

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

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

realm.where(Foo.class).findAllAsync().asFlowable()
.observeOn(Schedulers.computation())
.map(rxResults -> doExpensiveWork(rxResults))
.observeOn(AndroidSchedulers.mainThread())
.subscribe( ... );

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

realm.where(Foo.class).findAllAsync().asFlowable()
.filter(results -> results.isLoaded())
.first()
.subscribe( ... ) // You only get the results once

返回:

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

抛出异常

提示

另请参阅:

public String asJSON ()

返回RealmQuery匹配项的 JSON 表示形式。 周期将作为行索引返回。 这是一个用于检查数据或调试目的的辅助方法,该方法可能会拉取一个大字符串,从而导致 OutOfMemory 错误。

返回:

JSON 数组的字符串表示形式,其中包含生成的RealmQuery条目。

public boolean isFrozen ()

public boolean isLoaded ()

如果尚未加载结果,则返回false如果已加载结果,则返回true

返回:

true 如果查询已完成且数据可用,则如果查询仍在背景运行,则为false

public boolean load ()

使异步查询阻塞。 当query完成时,这也会trigger任何已注册的RealmChangeListener

返回:

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

删除所有用户定义的变更侦听器。

抛出异常

提示

另请参阅:

删除指定的变更侦听器。

参数

  • listener - 要删除的变更侦听器。

抛出异常

提示

另请参阅:

删除指定的变更侦听器。

参数

  • listener - 要删除的变更侦听器。

抛出异常

提示

另请参阅:

public void setBlob (
String fieldName,
byte[] value
)

设置collection中所有对象的给定字段的二进制值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setBoolean (
String fieldName,
boolean value
)

设置collection内所有对象中给定字段的boolean值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setByte (
String fieldName,
byte value
)

设置collection内所有对象中给定字段的byte值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setDate (
String fieldName,
Date value
)

设置collection内所有对象中给定字段的Date值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setDecimal128 (
String fieldName,
Decimal128 value
)

设置collection内所有对象中给定字段的Decimal128值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setDouble (
String fieldName,
double value
)

设置collection内所有对象中给定字段的double值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setFloat (
String fieldName,
float value
)

设置collection内所有对象中给定字段的float值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setInt (
String fieldName,
int value
)

设置collection内所有对象中给定字段的int值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setList <T >(
)

替换此collection中所有对象上给定字段的 RealmList。

参数

  • fieldName - 要更新的字段名称。

  • list - 字段的新值。

抛出异常

  • IllegalArgumentException - 如果字段 name 不存在,则如果列表中的对象未托管或者列表中的对象类型错误,则不是 RealmList 字段。

public void setLong (
String fieldName,
long value
)

设置collection内所有对象中给定字段的long值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setNull (
String fieldName
)

将collection中所有对象的给定字段的值设置为null

参数

  • fieldName - 要更新的字段名称。

抛出异常

public void setObject (
String fieldName,
)

在collection所有对象中的给定字段上设置对另一个对象的引用。

参数

  • fieldName - 要更新的字段名称。

  • value - 此字段引用的新对象。

抛出异常

public void setObjectId (
String fieldName,
ObjectId value
)

设置collection内所有对象中给定字段的ObjectId值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setShort (
String fieldName,
short value
)

设置collection内所有对象中给定字段的short值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setString (
String fieldName,
String value
)

设置collection内所有对象中给定字段的String值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setUUID (
String fieldName,
UUID value
)

设置collection内所有对象中给定字段的UUID值。

参数

  • fieldName - 要更新的字段名称。

  • value - 字段的新值。

抛出异常

public void setValue (
String fieldName,
Object value
)

更新查询结果内所有对象中由fieldName指定的字段。

此方法会自动尝试将String给出的数字和布尔值转换为适当的类型。 例如,如果字段类型为RealmFieldType.INTEGER ,则"10"将转换为10

使用setInt( string , int)等类型化 setter 比使用此方法更快。

参数

  • fieldName - 要更新的字段

  • value - 要更新的值。

抛出异常

  • IllegalArgumentException - 如果找不到字段、无法更新字段、参数与字段类型不匹配或无法转换以匹配底层字段类型。

String fieldName1,
Sort sortOrder1,
String fieldName2,
Sort sortOrder2
)

根据提供的字段和排序顺序对collection进行排序。

返回:

将创建并返回新的排序RealmResults 。 原始集合保持不变。

覆盖

sortOrderedRealmCollectionImpl类中

public RealmQuery where ()

返回一个RealmQuery ,可用于从此collection中查询特定objects。

返回:

RealmQuery 对象。

后退

RealmQuery