RealmList<E> 类
- java.lang.Object
-
- java.util.AbstractCollection <E>
-
- java.util.AbstractList <E>
-
- io.realm.RealmList<E>
-
- 类型参数:
E
- 列表中的对象类。
- 所有已实现的接口:
io.realm.internal.Freezable<RealmCollection<E>>
,io.realm.internal.ManageableObject
,OrderedRealmCollection<E>
,RealmCollection<E>
,Iterable<E>
,Collection<E>
,List<E>
public class RealmList<E> extends AbstractList<E> implements OrderedRealmCollection<E>
RealmList 用于对RealmObject
中的一对多关系进行建模。 RealmList 有两种模式:托管模式和非托管模式。 在托管模式下,所有对象都会保留在 Realm 中,在非托管模式下,它会像普通的 ArrayList 一样工作。只有 Realm 可以创建托管 RealmList。 每当更新底层 Realm 时,托管 RealmList 都会自动更新内容,并且只能使用
RealmObject
的 getter 进行访问。非托管 RealmList 可由用户创建,可包含托管和非托管 RealmObject。 这在处理 JSON 反序列化器(例如 GSON)或其他将值注入到类中的框架时非常有用。 可以使用
Realm.copyToRealm(Iterable, ImportFlag...)
方法将此列表中的非托管元素添加到 Realm 中。RealmList
包含的元素数量可以多于Integer.MAX_VALUE
。 在这种情况下,您只能访问其中的前Integer.MAX_VALUE
元素。
-
-
字段摘要
字段 修饰符和类型 字段 说明 io.realm.BaseRealm
baseRealm
此列表所在的BaseRealm
实例。
-
方法摘要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 void
add(int location, E element)
将指定对象插入此 List 的指定位置。boolean
add(E object)
在此 List 的末尾添加指定对象。void
addChangeListener(OrderedRealmCollectionChangeListener<RealmList<E>> listener)
向此RealmList
添加变更侦听器。void
addChangeListener(RealmChangeListener<RealmList<E>> listener)
向此RealmList
添加变更侦听器。Observable<CollectionChange<RealmList<E>>>
asChangesetObservable()
返回一个 Rx Observable,用于监控对此 RealmList 的更改。Flowable<RealmList<E>>
asFlowable()
返回一个监控此 RealmList 变更的 Rx Flowable。double
average(String fieldName)
返回给定字段的平均值。void
clear()
从此列表中删除所有元素,使其为空。boolean
contains(Object object)
如果列表在附加到 Realm 时包含指定元素,则返回true
。OrderedRealmCollectionSnapshot<E>
createSnapshot()
从此OrderedRealmCollection
创建快照。boolean
deleteAllFromRealm()
这将从底层 Realm 以及集合中删除集合中的所有对象。boolean
deleteFirstFromRealm()
从 Realm 中删除第一个对象。void
deleteFromRealm(int location)
从 Realm 中删除给定索引处的对象。boolean
deleteLastFromRealm()
从 Realm 中删除最后一个对象。E
first()
获取collection中的第一个对象。E
first(E defaultValue)
获取collection中的第一个对象。RealmList<E>
freeze()
E
get(int location)
返回此列表中指定位置的元素。Realm
getRealm()
返回此collection所属的Realm
实例。boolean
isFrozen()
boolean
isLoaded()
检查collection是否已完成数据加载。boolean
isManaged()
检查collection是否由Realm托管。boolean
isValid()
检查collection是否仍可有效使用,即Realm
实例尚未关闭。Iterator<E>
iterator()
E
last()
从collection中获取最后一个对象。E
last(E defaultValue)
从collection中获取最后一个对象。ListIterator<E>
listIterator()
ListIterator<E>
listIterator(int location)
boolean
load()
阻止collection,直到所有数据都可用。Number
max(String fieldName)
查找字段的最大值。Date
maxDate(String fieldName)
查找最大日期。Number
min(String fieldName)
查找字段的最小值。Date
minDate(String fieldName)
查找最小日期。void
move(int oldPos, int newPos)
将对象从一个位置移动到另一个位置,同时保持列表大小固定。E
remove(int location)
从此列表中删除指定位置的对象。boolean
remove(Object object)
如果此Collection
包含指定对象,则从中删除一个实例。boolean
removeAll(Collection<?> collection)
删除指定Collection
中每个对象在此Collection
中出现的所有情况。void
removeAllChangeListeners()
删除所有用户定义的变更侦听器。void
removeChangeListener(OrderedRealmCollectionChangeListener<RealmList<E>> listener)
删除指定的变更侦听器。void
removeChangeListener(RealmChangeListener<RealmList<E>> listener)
删除指定的变更侦听器。E
set(int location, E object)
将列表中指定位置的元素替换为指定对象。int
size()
返回此List
中的元素数量。RealmResults<E>
sort(String fieldName)
根据提供的字段以升序对collection进行排序。RealmResults<E>
sort(String[] fieldNames, Sort[] sortOrders)
根据提供的字段和排序顺序对collection进行排序。RealmResults<E>
sort(String fieldName, Sort sortOrder)
根据提供的字段和排序顺序对collection进行排序。RealmResults<E>
sort(String fieldName1, Sort sortOrder1, String fieldName2, Sort sortOrder2)
根据提供的字段和排序顺序对collection进行排序。Number
sum(String fieldName)
计算给定字段的总和。String
toString()
RealmQuery<E>
where()
返回一个 RealmQuery,可用于查询该类的特定对象。-
从类 java.util 继承的方法AbstractList
addAll, equals, hashCode, indexOf, lastIndexOf, subList
-
从类 java.util 继承的方法AbstractCollection
addAll, containsAll, isEmpty, retainAll, toArray, toArray
-
从接口 java.util 继承的方法collection
parallelStream, removeIf, stream, toArray
-
从接口 java.util 继承的方法列表
addAll, addAll, containsAll, equals, hashCode, indexOf, isEmpty, lastIndexOf, replaceAll, retainAll, sort, spliterator, subList, toArray, toArray
-
-
-
-
构造函数详细信息
-
RealmList
public RealmList()
在非托管模式下创建 RealmList,其中的元素不受 Realm 控制。 这实际上使 RealmList 函数成为ArrayList
,并且无法查询此状态下的对象。使用
Realm.copyToRealm(Iterable, ImportFlag...)
在 Realm 中正确保留其元素。
-
RealmList
公共 RealmList( E ...对象)
在非托管模式下创建一个具有初始元素列表的 RealmList。 非托管模式下的 RealmList 充当ArrayList
,无法查询此状态下的对象。使用
Realm.copyToRealm(Iterable, ImportFlag...)
正确保留 Realm 中的所有非托管元素。- 参数:
objects
- 列表中的初始对象。
-
-
方法详细信息
-
isValid
public boolean isValid()
检查collection是否仍可有效使用,即Realm
实例尚未关闭。对于非托管collection,它将始终返回true
。- 指定者:
isValid
在接口中io.realm.internal.ManageableObject
- 指定者:
isValid
在接口中RealmCollection<E>
- 返回:
true
如果仍可使用,则为非托管collection,否则为false
。
-
IsFrozen
public boolean isFrozen()
- 指定者:
isFrozen
在接口中io.realm.internal.ManageableObject
-
isManaged
public boolean isManaged()
检查collection是否由 Realm 托管。一个托管的collection只是底层 Realm 文件中数据的包装器。在 Looper 线程上,托管 collection 将实时更新,因此它始终点向最新数据。托管collection具有线程限制,因此除了创建它们的线程之外,无法从其他线程访问托管collection。如果此方法返回
false
,则该集合为非托管集合。 非托管集合只是普通的 Java 集合,因此不会实时更新。- 指定者:
isManaged
在接口中io.realm.internal.ManageableObject
- 指定者:
isManaged
在接口中RealmCollection<E>
- 返回:
true
如果这是托管RealmCollection
,否则为false
。
-
添加
public void add(int location, @Nullable E element)
将指定对象插入此 List 的指定位置。 该对象会插入到指定位置的任何前一个元素之前。 如果该位置等于此 List 的大小,则将该对象添加到末尾。- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
Realm.copyToRealm(RealmModel, ImportFlag...)
,则它们不会再次复制到 Realm。 - 托管 RealmList :可以将非托管对象添加到已托管的 RealmList 中。 在这种情况下,如果对象具有主键,则使用
Realm.copyToRealm(RealmModel, ImportFlag...)
或Realm.copyToRealmOrUpdate(RealmModel, ImportFlag...)
以透明方式将对象复制到 Realm。
- 指定者:
add
在接口中List<E>
- 覆盖:
add
课堂上AbstractList<E>
- 参数:
location
- 要插入的索引。element
- 要添加的元素。- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或container对象已被删除。IndexOutOfBoundsException
- 如果location < 0 || location > size()
。
- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
-
添加
公共布尔添加( @Nullable E对象)
在此 List 的末尾添加指定对象。- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
Realm.copyToRealm(RealmModel, ImportFlag...)
,则它们不会再次复制到 Realm。 - 托管 RealmList :可以将非托管对象添加到已托管的 RealmList 中。 在这种情况下,如果对象具有主键,则使用
Realm.copyToRealm(RealmModel, ImportFlag...)
或Realm.copyToRealmOrUpdate(RealmModel, ImportFlag...)
以透明方式将对象复制到 Realm。
- 指定者:
add
在接口中Collection<E>
- 指定者:
add
在接口中List<E>
- 覆盖:
add
课堂上AbstractList<E>
- 参数:
object
- 要添加的对象。- 返回:
- 始终
true
。 - 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。
- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
-
集
公共E集(int 位置, @Nullable E对象)
将列表中指定位置的元素替换为指定对象。- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
Realm.copyToRealm(RealmModel, ImportFlag...)
,则它们不会再次复制到 Realm。 - 托管 RealmList :可以将非托管对象添加到已托管的 RealmList 中。 在这种情况下,如果对象具有主键,则使用
Realm.copyToRealm(RealmModel, ImportFlag...)
或Realm.copyToRealmOrUpdate(RealmModel, ImportFlag...)
以透明方式将对象复制到 Realm。
- 指定者:
set
在接口中List<E>
- 覆盖:
set
课堂上AbstractList<E>
- 参数:
location
— 放置指定对象的索引。object
- 要添加的对象。- 返回:
- 索引处的前一个元素。
- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。IndexOutOfBoundsException
- 如果location < 0 || location >= size()
。
- 非托管 RealmList :可以同时添加托管和非托管对象。 如果将托管对象添加到非托管 RealmList,之后使用
-
move
public void move(int oldPos, int newPos)
将对象从一个位置移动到另一个位置,同时保持列表大小固定。 RealmObject 将进行移动,因此不会引入null
值。- 参数:
oldPos
— 要移动的 RealmObject 的索引。newPos
- 目标位置。 如果 newPos < oldPos,则该位置的对象将向右移动。 如果 oldPos < newPos,indexes > oldPos 将向左移动一次。- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。IndexOutOfBoundsException
- 如果任何位置超出 [0, size()]。
-
清除
public void clear()
从此列表中删除所有元素,使其为空。 此方法不会从 Realm 中删除对象。- 指定者:
clear
在接口中Collection<E>
- 指定者:
clear
在接口中List<E>
- 覆盖:
clear
课堂上AbstractList<E>
- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。- 另请参阅:
List.isEmpty()
、List.size()
、deleteAllFromRealm()
-
删除
公共E删除(int位置)
从此列表中删除指定位置的对象。- 指定者:
remove
在接口中List<E>
- 覆盖:
remove
课堂上AbstractList<E>
- 参数:
location
- 要删除的对象的索引。- 返回:
- 删除的对象。
- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。IndexOutOfBoundsException
- 如果location < 0 || location >= size()
。
-
删除
公共布尔删除( @Nullable Object对象)
如果此Collection
包含指定对象,则从中删除一个实例。 此实现会遍历此Collection
并测试迭代器返回的每个元素e
,确定e
是否等于给定对象。 如果为object != null
,则使用object.equals(e)
执行此测试,否则使用object == null
执行。 如果找到等于给定对象的元素,则对迭代器调用remove
方法并返回true
,否则返回false
。 如果迭代器不支持删除元素,则会引发UnsupportedOperationException
。- 指定者:
remove
在接口中Collection<E>
- 指定者:
remove
在接口中List<E>
- 覆盖:
remove
课堂上AbstractCollection<E>
- 参数:
object
- 要删除的对象。- 返回:
true
如果此Collection
已修改,则否则为false
。- 抛出异常:
ClassCastException
- 如果传递的对象类型不正确。NullPointerException
- 如果object
为null
。
-
删除全部
public boolean removeAll(Collection<?> collection)
删除指定Collection
中每个对象在此Collection
中出现的所有情况。 在此方法返回后,在此Collection
中找不到所传递的Collection
中的任何元素。此实现遍历
Collection
并测试迭代器返回的每个元素e
,看看它是否包含在指定的Collection
中。 如果此测试是肯定的,则在迭代器上调用remove
方法。- 指定者:
removeAll
在接口中Collection<E>
- 指定者:
removeAll
在接口中List<E>
- 覆盖:
removeAll
课堂上AbstractCollection<E>
- 参数:
collection
- 要删除的collection的对象。- 返回:
true
如果此Collection
已修改,则否则为false
。- 抛出异常:
ClassCastException
- 如果collection
的一个或多个元素的类型不正确。NullPointerException
- 如果collection
为null
。
-
deleteFirstFromRealm
public boolean deleteFirstFromRealm()
从 Realm 中删除第一个对象。 这也会将其从该collection中删除。- 指定者:
deleteFirstFromRealm
在接口中OrderedRealmCollection<E>
- 返回:
true
如果删除了对象,则为false
。
-
deleteLastFromRealm
public boolean deleteLastFromRealm()
从 Realm 中删除最后一个对象。 这也会将其从该collection中删除。- 指定者:
deleteLastFromRealm
在接口中OrderedRealmCollection<E>
- 返回:
true
如果删除了对象,则为false
。
-
获取
@Nullable public E get(int 位置)
返回此列表中指定位置的元素。- 指定者:
get
在接口中List<E>
- 指定者:
get
课堂上AbstractList<E>
- 参数:
location
- 要返回的元素的索引。- 返回:
- 指定索引处的元素。
- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。IndexOutOfBoundsException
- 如果location < 0 || location >= size()
。
-
first
@Nullable public E first()
获取collection中的第一个对象。- 指定者:
first
在接口中OrderedRealmCollection<E>
- 返回:
- 第一个对象。
-
first
@Nullable public E first( @Nullable E defaultValue)
获取集合中的第一个对象。 如果collection为空,将使用提供的默认。- 指定者:
first
在接口中OrderedRealmCollection<E>
- 返回:
- 第一个对象或提供的默认值。
-
last
@Nullable public E last()
从collection中获取最后一个对象。- 指定者:
last
在接口中OrderedRealmCollection<E>
- 返回:
- 最后一个对象。
-
last
@Nullable public E last( @Nullable E defaultValue)
从collection中获取最后一个对象。如果collection为空,将使用提供的默认。- 指定者:
last
在接口中OrderedRealmCollection<E>
- 返回:
- 最后一个对象或提供的默认值。
-
sort
public RealmResults<E> sort(String fieldName)
根据提供的字段以升序对collection进行排序。- 指定者:
sort
在接口中OrderedRealmCollection<E>
- 参数:
fieldName
- 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。
-
sort
public RealmResults<E> sort(String fieldName, Sort sortOrder)
根据提供的字段和排序顺序对collection进行排序。- 指定者:
sort
在接口中OrderedRealmCollection<E>
- 参数:
fieldName
- 作为排序依据的字段名称。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。sortOrder
- 排序依据的方向。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。
-
sort
public 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保持不变。
-
sort
public RealmResults<E> sort(String[] fieldNames, Sort[] sortOrders)
根据提供的字段和排序顺序对collection进行排序。- 指定者:
sort
在接口中OrderedRealmCollection<E>
- 参数:
fieldNames
- 作为排序依据的字段名称数组。 仅支持 boolean、short、int、long、float、double、Date 和 String 类型的字段。sortOrders
- 排序依据的方向。- 返回:
- 将创建并返回一个新的已排序
RealmResults
。 原始collection保持不变。
-
deleteFromRealm
public void deleteFromRealm(int location)
从 Realm 中删除给定索引处的对象。 这也会将其从collection中删除。- 指定者:
deleteFromRealm
在接口中OrderedRealmCollection<E>
- 参数:
location
- 标识要删除的对象的数组索引。
-
size
public int size()
返回此List
中的元素数量。- 指定者:
size
在接口中Collection<E>
- 指定者:
size
在接口中List<E>
- 指定者:
size
课堂上AbstractCollection<E>
- 返回:
- 此
List
中的元素数量。 - 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。
-
WHERE
public RealmQuery<E> where()
返回一个 RealmQuery,可用于查询该类的特定对象。- 指定者:
where
在接口中RealmCollection<E>
- 返回:
- RealmQuery 对象。
- 抛出异常:
IllegalStateException
- 如果 Realm 实例已关闭或父对象已删除。- 另请参阅:
RealmQuery
-
min
@Nullable public Number min( String fieldName)
查找字段的最小值。- 指定者:
min
在接口中RealmCollection<E>
- 参数:
fieldName
- 查找最小值的字段。 仅支持数字字段。- 返回:
- 如果对象不存在,或者给定字段的值为
null
,则返回null
。否则返回最小值。 确定最小值时,具有null
值的对象将被忽略。
-
Max
@Nullable public Number max( String fieldName)
查找字段的最大值。- 指定者:
max
在接口中RealmCollection<E>
- 参数:
fieldName
- 要查找最大值的字段。 仅支持数字字段。- 返回:
- 如果对象不存在,或者给定字段的值为
null
,则返回null
。否则返回最大值。 确定最大值时,具有null
值的对象将被忽略。
-
总和
公共数字总和(字符串字段名称)
计算给定字段的总和。- 指定者:
sum
在接口中RealmCollection<E>
- 参数:
fieldName
- 要求和的字段。 仅支持数字字段。- 返回:
- 总和。 如果对象不存在,或者给定字段的值为
null
,则返回0
。计算总和时,具有null
值的对象将被忽略。
-
平均值
公共双重平均值( String fieldName)
返回给定字段的平均值。- 指定者:
average
在接口中RealmCollection<E>
- 参数:
fieldName
- 计算平均值的字段。 仅支持数字字段。- 返回:
- 查询结果中对象之间给定字段的平均值。对于所有类型的数字字段,该值的类型都是 double。如果对象不存在,或者给定字段的值为
null
,则返回0
。计算平均值时,具有null
值的对象将被忽略。
-
maxDate
@Nullable public Date maxDate( String fieldName)
查找最大日期。- 指定者:
maxDate
在接口中RealmCollection<E>
- 参数:
fieldName
- 查找最大日期的字段。 如果 fieldName 不是 Date 类型,则会抛出异常。- 返回:
- 如果对象不存在,或者给定日期字段的值为
null
,则返回null
。否则,返回最大日期。 确定最大日期时,具有null
值的对象将被忽略。
-
minDate
@Nullable public Date minDate( String fieldName)
查找最小日期。- 指定者:
minDate
在接口中RealmCollection<E>
- 参数:
fieldName
- 查找最小日期的字段。如果 fieldName 不是 Date 类型,则会抛出异常。- 返回:
- 如果对象不存在,或者给定日期字段的值为
null
,则返回null
。 否则,返回最小日期。 确定最小日期时,具有null
值的对象将被忽略。
-
deleteAllFromRealm
public boolean deleteAllFromRealm()
这将从底层 Realm 以及集合中删除集合中的所有对象。- 指定者:
deleteAllFromRealm
在接口中RealmCollection<E>
- 返回:
true
如果删除了对象,则返回false
。
-
isLoaded
public boolean isLoaded()
检查collection是否已完成数据加载。- 指定者:
isLoaded
在接口中RealmCollection<E>
- 返回:
true
如果数据已加载且可用,则如果仍在加载数据,则为false
。
-
负载
公共 boolean load()
阻止collection,直到所有数据都可用。- 指定者:
load
在接口中RealmCollection<E>
- 返回:
true
如果可以成功加载数据,则为false
。
-
contains
公共布尔包含( @Nullable Object对象)
如果列表在附加到 Realm 时包含指定元素,则返回true
。 该方法将查询原生 Realm 底层storage engine,以快速找到指定的元素。如果列表未附加到 Realm,则将执行默认的
List.contains(Object)
实现。- 指定者:
contains
在接口中Collection<E>
- 指定者:
contains
在接口中List<E>
- 指定者:
contains
在接口中RealmCollection<E>
- 覆盖:
contains
课堂上AbstractCollection<E>
- 参数:
object
- 要测试其在此列表中是否存在的元素。- 返回:
true
如果此列表包含指定元素,否则为false
。
-
listIterator
@Nonnull public ListIterator<E> listIterator()
- 指定者:
listIterator
在接口中List<E>
- 覆盖:
listIterator
课堂上AbstractList<E>
-
listIterator
@Nonnull public ListIterator<E> listIterator(int location)
- 指定者:
listIterator
在接口中List<E>
- 覆盖:
listIterator
课堂上AbstractList<E>
-
createSnapshot
public OrderedRealmCollectionSnapshot<E> createSnapshot()
从此OrderedRealmCollection
创建快照。- 指定者:
createSnapshot
在接口中OrderedRealmCollection<E>
- 返回:
- 此collection的快照。
- 另请参阅:
OrderedRealmCollectionSnapshot
-
getRealm
公共Realm getRealm()
返回此collection所属的Realm
实例。不鼓励在返回的实例上调用
Closeable.close()
,因为它与在原始 Realm 实例上调用它相同,这可能会导致 Realm 完全关闭,从而使列表失效。- 返回:
Realm
collection所属的实例,如果该collection为非托管,则为null
。- 抛出异常:
IllegalStateException
- 如果 Realm 是DynamicRealm
的实例或者Realm
已关闭。
-
toString
public String toString()
- 覆盖:
toString
课堂上AbstractCollection<E>
-
asFlowable
public Flowable<RealmList<E>> asFlowable()
返回一个监控此 RealmList 更改的 Rx Flowable。 订阅时,它将发出当前的 RealmList。 RealmList 将在 RealmList 更新时不断发出 -onComplete
将永远不会被调用。从 Realm Flowable 发出的项被冻结(请参阅
freeze()
。 这意味着它们是不可变的,可以在任何线程上读取。Realm Flowables 始终从持有活动 RealmList 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:
list.asFlowable() .observeOn(Schedulers.computation()) .map(rxResults -> doExpensiveWork(rxResults)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( ... );
如果希望
asFlowable()
停止发出项目,可以使用first()
操作符指示 RxJava 仅发出第一项:list.asFlowable() .first() .subscribe( ... ) // You only get the results once
- 返回:
- 仅调用
onNext
的 RxJava Observable。 它永远不会调用onComplete
或OnError
。 - 抛出异常:
UnsupportedOperationException
- 如果所需的 RxJava 框架不在类路径上,或者相应的 Realm 实例不支持 RxJava。- 另请参阅:
- RxJava 和 Realm
-
asChangesetObservable
public Observable<CollectionChange<RealmList<E>>> asChangesetObservable()
返回一个 Rx Observable,用于监控对此 RealmList 的更改。 订阅时,它将发出当前的 RealmList。 对于 RealmList 的每次更新,都将发送由 RealmList 和OrderedCollectionChangeSet
组成的对。 首次发出 RealmList 时,变更集将为null
。RealmList 将在 RealmList 更新时不断发出 -
onComplete
将永远不会被调用。从 Realm Observables 发出的项被冻结(请参阅
freeze()
。 这意味着它们是不可变的,可以在任何线程上读取。Realm Observables 始终从持有活动 Realm 的线程中发出项目。 这意味着,如果需要进行进一步处理,建议观察计算调度器上的值:
list.asChangesetObservable() .observeOn(Schedulers.computation()) .map((rxList, changes) -> doExpensiveWork(rxList, changes)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( ... );
- 返回:
- 仅调用
onNext
的 RxJava Observable。 它永远不会调用onComplete
或OnError
。 - 抛出异常:
UnsupportedOperationException
- 如果所需的 RxJava 框架不在类路径上,或者相应的 Realm 实例不支持 RxJava。IllegalStateException
- 如果 Realm 不是在 事件循环 线程上打开的。- 另请参阅:
- RxJava 和 Realm
-
addChangeListener
public void addChangeListener(OrderedRealmCollectionChangeListener<RealmList<E>> listener)
向此RealmList
添加变更侦听器。注册变更侦听器不会阻止底层 RealmList 被垃圾收集。 如果对 RealmList 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。
public class MyActivity extends Activity { private RealmList<Dog> dogs; // Strong reference to keep listeners alive \@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dogs = realm.where(Person.class).findFirst().getDogs(); dogs.addChangeListener(new OrderedRealmCollectionChangeListener<RealmList<Dog>>() { \@Override public void onChange(RealmList<Dog> dogs, OrderedCollectionChangeSet changeSet) { // React to change } }); } }
- 参数:
listener
- 要通知的变更侦听器。- 抛出异常:
IllegalArgumentException
- 如果变更侦听器为null
。IllegalStateException
- 如果您尝试从非 事件循环 或IntentService
线程添加侦听器。
-
removeChangeListener
public void removeChangeListener(OrderedRealmCollectionChangeListener<RealmList<E>> listener)
删除指定的变更侦听器。- 参数:
listener
- 要删除的变更侦听器。- 抛出异常:
IllegalArgumentException
- 如果变更侦听器为null
。IllegalStateException
- 如果尝试从非 事件循环 线程中删除侦听器。- 另请参阅:
RealmChangeListener
-
addChangeListener
public void addChangeListener(RealmChangeListener<RealmList<E>> listener)
向此RealmList
添加变更侦听器。注册变更侦听器不会阻止底层 RealmList 被垃圾收集。 如果对 RealmList 进行垃圾回收,则将停止触发变更侦听器。 为避免这种情况,请尽可能长时间地保留强引用,例如在类变量中。
public class MyActivity extends Activity { private RealmList<Dog> dogs; // Strong reference to keep listeners alive \@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dogs = realm.where(Person.class).findFirst().getDogs(); dogs.addChangeListener(new RealmChangeListener<RealmList<Dog>>() { \@Override public void onChange(RealmList<Dog> dogs) { // React to change } }); } }
- 参数:
listener
- 要通知的变更侦听器。- 抛出异常:
IllegalArgumentException
- 如果变更侦听器为null
。IllegalStateException
- 如果您尝试从非 事件循环 或IntentService
线程添加侦听器。
-
removeChangeListener
public void removeChangeListener(RealmChangeListener<RealmList<E>> listener)
删除指定的变更侦听器。- 参数:
listener
- 要删除的变更侦听器。- 抛出异常:
IllegalArgumentException
- 如果变更侦听器为null
。IllegalStateException
- 如果尝试从非 事件循环 线程中删除侦听器。- 另请参阅:
RealmChangeListener
-
删除所有变更监听器
public void removeAllChangeListeners()
删除所有用户定义的变更侦听器。- 抛出异常:
IllegalStateException
- 如果您尝试从非事件循环线程中删除侦听器。- 另请参阅:
RealmChangeListener
-
-