安装包 io.realm

RealmResults<E> 类

  • 类型参数:
    E — 此列表中的对象类。
    所有已实现的接口:
    io.realm.internal.Freezable<RealmCollection<E>>io.realm.internal.ManageableObjectOrderedRealmCollection<E>RealmCollection<E>Iterable<E>Collection<E>List<E>

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

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

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

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

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

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

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

    另请参阅:
    RealmQuery.findAll()Realm.executeTransaction(Realm.Transaction)
    • 字段详细信息

      • baseRealm

        public final io.realm.BaseRealm baseRealm
        此collection所在的BaseRealm实例。

        警告:此字段仅供内部使用,不应使用。

    • 方法详细信息

      • WHERE

        public RealmQuery < E > where()
        返回一个RealmQuery ,可用于从此集合中查询特定对象。
        返回:
        RealmQuery 对象。
        另请参阅:
        RealmQuery
      • 排序

        公共RealmResults < E >sort​( String fieldName1, Sort sortOrder1, String fieldName2, Sort sortOrder2)
        根据提供的字段和排序顺序对collection进行排序。
        指定者:
        sort 在接口中 OrderedRealmCollection<E>
        参数:
        fieldName1 - 第一个字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。
        sortOrder1 — 第一个字段的排序顺序。
        fieldName2 — 第二个字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。
        sortOrder2 — 第二个字段的排序顺序。
        返回:
        将创建并返回一个新的已排序RealmResults 。 原始collection保持不变。
      • isLoaded

        public boolean isLoaded()
        如果尚未加载结果,则返回false如果已加载结果,则返回true
        返回:
        true 如果查询已完成且数据可用,则如果查询仍在背景运行,则为false
      • 负载

        公共 boolean load()
        使异步查询阻塞。 当查询完成时,这也会触发任何已注册的RealmChangeListener
        返回:
        true 如果成功完成查询,则为false
      • setValue

        public void setValue​( String fieldName, @Nullable 对象 value)
        更新查询结果内所有对象中由fieldName指定的字段。

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

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

        参数:
        fieldName - 要更新的字段
        value - 要更新的值。
        抛出异常:
        IllegalArgumentException - 如果找不到字段、无法更新字段、参数与字段类型不匹配或无法转换以匹配底层字段类型。
      • setNull

        public void setNull​( String fieldName)
        将collection中所有对象的给定字段的值设置为null
        参数:
        fieldName - 要更新的字段名称。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在或是主键属性。
        IllegalStateException - 如果字段无法容纳null值。
      • setBoolean

        public void setBoolean​( String fieldName, boolean value)
        设置collection内所有对象中给定字段的boolean值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、则为主键属性或者不是布尔字段。
      • setByte

        public void setByte​( String fieldName, byte value)
        设置collection内所有对象中给定字段的byte值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是字节字段。
      • setShort

        公共无效setShort​(字符串字段名称,短值)
        设置collection内所有对象中给定字段的short值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是短字段。
      • setInt

        public void setInt​( String fieldName, int value)
        设置collection内所有对象中给定字段的int值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是整型字段。
      • setLong

        public void setLong​( String fieldName, long value)
        设置collection内所有对象中给定字段的long值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是长字段。
      • setFloat

        public void setFloat​( String fieldName, float value)
        设置collection内所有对象中给定字段的float值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是浮点字段。
      • setDouble

        public void setDouble​( String fieldName, double value)
        设置collection内所有对象中给定字段的double值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是双字段。
      • setString

        public void setString​( String fieldName, @Nullable String value)
        设置collection内所有对象中给定字段的String值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是字符串字段。
      • setBlob

        public void setBlob​( String fieldName, @Nullable byte[] value)
        设置collection中所有对象的给定字段的二进制值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是二进制字段。
      • setDate

        public void setDate​( String fieldName, @Nullable Date value)
        设置collection内所有对象中给定字段的Date值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是Date字段。
      • setObject

        public void setObject​( String fieldName, @Nullable RealmModel value)
        在collection所有对象中的给定字段上设置对另一个对象的引用。
        参数:
        fieldName - 要更新的字段名称。
        value - 此字段引用的新对象。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是对象引用字段。
      • setDecimal128

        public void setDecimal128​( String fieldName, @Nullable Decimal128 value)
        设置collection内所有对象中给定字段的Decimal128值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是Decimal128字段。
      • setObjectId

        public void setObjectId​( String fieldName, @Nullable ObjectId value)
        设置collection内所有对象中给定字段的ObjectId值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是ObjectId字段。
      • setUUID

        public void setUUID​( String fieldName, @Nullable UUID value)
        设置collection内所有对象中给定字段的UUID值。
        参数:
        fieldName - 要更新的字段名称。
        value - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段名称不存在、为主键属性或者不是UUID字段。
      • setList

        public <T> void setList​( String fieldName, RealmList <T> list)
        替换此collection中所有对象上给定字段的 RealmList。
        参数:
        fieldName - 要更新的字段名称。
        list - 字段的新值。
        抛出异常:
        IllegalArgumentException - 如果字段 name 不存在,则如果列表中的对象未托管或者列表中的对象类型错误,则不是 RealmList 字段。
      • IsFrozen

        public boolean isFrozen()
      • addChangeListener

        public void addChangeListener​( RealmChangeListener < RealmResults < E >>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 - 要通知的变更侦听器。
        抛出异常:
        IllegalArgumentException - 如果变更侦听器为null
        IllegalStateException - 如果您尝试从非 事件循环 或IntentService线程添加侦听器。
      • addChangeListener

        public void addChangeListener​( OrderedRealmCollectionChangeListener < RealmResults < E >>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 OrderedRealmCollectionChangeListener<RealmResults<Person>>() {
                   \@Override
                   public void onChange(RealmResults<Person> persons, OrderedCollectionChangeSet changeSet) {
                       // React to change
                   }
               });
             }
         }
         
         
        参数:
        listener - 要通知的变更侦听器。
        抛出异常:
        IllegalArgumentException - 如果变更侦听器为null
        IllegalStateException - 如果您尝试从非 事件循环 或IntentService线程添加侦听器。
      • 删除所有变更监听器

        public void removeAllChangeListeners()
        删除所有用户定义的变更侦听器。
        抛出异常:
        IllegalStateException - 如果您尝试从非事件循环线程中删除侦听器。
        另请参阅:
        RealmChangeListener
      • asFlowable

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

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

        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
        抛出异常:
        UnsupportedOperationException - 如果所需的 RxJava 框架不在类路径上,或者相应的 Realm 实例不支持 RxJava。
        IllegalStateException - 如果 Realm 不是在 事件循环 线程上打开的。
        另请参阅:
        RxJava 和 Realm
      • asChangesetObservable

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

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

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

        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
        抛出异常:
        UnsupportedOperationException - 如果所需的 RxJava 框架不在类路径上,或者相应的 Realm 实例不支持 RxJava。
        IllegalStateException - 如果 Realm 不是在 事件循环 线程上打开的。
        另请参阅:
        RxJava 和 Realm
      • asJSON

        public String asJSON()
        返回RealmQuery的匹配项的 JSON 表示形式。 周期将作为行索引返回。 这是一个用于检查数据或调试目的的辅助方法,该方法可能会拉取一个大字符串,从而导致 OutOfMemory 错误。
        返回:
        JSON 数组的字符串表示形式,其中包含生成的RealmQuery的条目。
      • isValid

        public boolean isValid()
        检查collection是否仍可有效使用,即Realm实例尚未关闭。对于非托管collection,它将始终返回true
        指定者:
        isValid 在接口中 io.realm.internal.ManageableObject
        指定者:
        isValid 在接口中 RealmCollection<E>
        返回:
        true 如果仍可使用,则为非托管collection,否则为false
      • 获取

        @Nullable public E get​(int 位置)
        返回此列表中指定位置的元素。
        指定者:
        get 在接口中 List<E>
        指定者:
        get 课堂上 AbstractList<E>
        参数:
        location - 要返回的元素的索引。
        返回:
        指定索引处的元素。
        抛出异常:
        IndexOutOfBoundsException - 如果location < 0 || location >= size()
      • first

        @Nullable public E first​( @Nullable E defaultValue)
        获取集合中的第一个对象。 如果collection为空,将使用提供的默认。
        指定者:
        first 在接口中 OrderedRealmCollection<E>
        返回:
        第一个对象或提供的默认值。
      • last

        @Nullable public E last​( @Nullable E defaultValue)
        从collection中获取最后一个对象。如果collection为空,将使用提供的默认。
        指定者:
        last 在接口中 OrderedRealmCollection<E>
        返回:
        最后一个对象或提供的默认值。
      • deleteFromRealm

        public void deleteFromRealm​(int 位置)
        从 Realm 中删除给定索引处的对象。 这也会将其从collection中删除。
        指定者:
        deleteFromRealm 在接口中 OrderedRealmCollection<E>
        参数:
        location - 标识要删除的对象的数组索引。
      • deleteAllFromRealm

        public boolean deleteAllFromRealm()
        这将从底层 Realm 以及集合中删除集合中的所有对象。
        指定者:
        deleteAllFromRealm 在接口中 RealmCollection<E>
        返回:
        true 如果删除了对象,则返回false
      • 排序

        公共RealmResults <E> sort​( String fieldName)
        根据提供的字段以升序对collection进行排序。
        指定者:
        sort 在接口中 OrderedRealmCollection<E>
        参数:
        fieldName - 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。
        返回:
        将创建并返回一个新的已排序RealmResults 。 原始collection保持不变。
      • 排序

        public RealmResults <E> sort​( String fieldName, Sort sortOrder)
        根据提供的字段和排序顺序对collection进行排序。
        指定者:
        sort 在接口中 OrderedRealmCollection<E>
        参数:
        fieldName - 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。
        sortOrder - 排序依据的方向。
        返回:
        将创建并返回一个新的已排序RealmResults 。 原始collection保持不变。
      • 排序

        public RealmResults <E> sort​( String [] fieldNames, Sort [] sortOrders)
        根据提供的字段和排序顺序对collection进行排序。
        指定者:
        sort 在接口中 OrderedRealmCollection<E>
        参数:
        fieldNames - 作为排序依据的字段名称数组。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。
        sortOrders - 排序依据的方向。
        返回:
        将创建并返回一个新的已排序RealmResults 。 原始collection保持不变。
      • size

        public int size()
        返回此查询结果中的元素数。
        指定者:
        size 在接口中 Collection<E>
        指定者:
        size 在接口中 List<E>
        指定者:
        size 课堂上 AbstractCollection<E>
        返回:
        此查询结果中的元素数量。
      • 公共数字min​( String fieldName)
        查找字段的最小值。
        指定者:
        min 在接口中 RealmCollection<E>
        参数:
        fieldName - 查找最小值的字段。 仅支持数字字段。
        返回:
        如果对象不存在,或者给定字段的值为null ,则返回null 。否则返回最小值。 确定最小值时,具有null值的对象将被忽略。
      • minDate

        公共日期minDate​( String fieldName)
        查找最小日期。
        指定者:
        minDate 在接口中 RealmCollection<E>
        参数:
        fieldName - 查找最小日期的字段。如果 fieldName 不是 Date 类型,则会抛出异常。
        返回:
        如果对象不存在,或者给定日期字段的值为null ,则返回null 。 否则,返回最小日期。 确定最小日期时,具有null值的对象将被忽略。
      • 最大

        公共数字max​( String fieldName)
        查找字段的最大值。
        指定者:
        max 在接口中 RealmCollection<E>
        参数:
        fieldName - 要查找最大值的字段。 仅支持数字字段。
        返回:
        如果对象不存在,或者给定字段的值为null ,则返回null 。否则返回最大值。 确定最大值时,具有null值的对象将被忽略。
      • maxDate

        @Nullable public Date maxDate​( String fieldName)
        查找最大日期。
        指定者:
        maxDate 在接口中 RealmCollection<E>
        参数:
        fieldName - 查找最大日期的字段。 如果 fieldName 不是 Date 类型,则会抛出异常。
        返回:
        如果对象不存在,或者给定日期字段的值为null ,则返回null 。否则,返回最大日期。 确定最大日期时,具有null值的对象将被忽略。
        抛出异常:
        IllegalArgumentException - 如果 fieldName 不是日期字段。
      • 总和

        公共数字总和(字符串字段名称)
        计算给定字段的总和。
        指定者:
        sum 在接口中 RealmCollection<E>
        参数:
        fieldName - 要求和的字段。 仅支持数字字段。
        返回:
        总和。 如果对象不存在,或者给定字段的值为null ,则返回0 。计算总和时,具有null值的对象将被忽略。
      • 平均值

        公共双重平均值( String fieldName)
        返回给定字段的平均值。
        指定者:
        average 在接口中 RealmCollection<E>
        参数:
        fieldName - 计算平均值的字段。 仅支持数字字段。
        返回:
        查询结果中对象之间给定字段的平均值。对于所有类型的数字字段,该值的类型都是 double。如果对象不存在,或者给定字段的值为null ,则返回0 。计算平均值时,具有null值的对象将被忽略。
      • deleteLastFromRealm

        public boolean deleteLastFromRealm()
        删除列表中的最后一个对象。 这也会从底层 Realm 中删除该对象。
        指定者:
        deleteLastFromRealm 在接口中 OrderedRealmCollection<E>
        返回:
        true 如果删除了对象,则为false
        抛出异常:
        IllegalStateException - 如果相应的 Realm 已关闭或位于不正确的线程中。
      • deleteFirstFromRealm

        public boolean deleteFirstFromRealm()
        删除列表中的第一个对象。 这也会从底层 Realm 中删除该对象。
        指定者:
        deleteFirstFromRealm 在接口中 OrderedRealmCollection<E>
        返回:
        true 如果删除了对象,则为false
        抛出异常:
        IllegalStateException - 如果相应的 Realm 已关闭或位于不正确的线程中。
      • getRealm

        公共Realm getRealm()
        返回此collection所属的Realm实例。

        不鼓励在返回的实例上调用Closeable.close() ,因为它与在原始 Realm 实例上调用它相同,这可能会导致 Realm 完全关闭,从而使查询结果失效。

        返回:
        Realm 此collection所属的实例。
        抛出异常:
        IllegalStateException - 如果 Realm 是DynamicRealm的实例或者Realm已关闭。