了解Realm OrderedRealmCollectionChangeListener的工作原理是什么?

时间:2017-04-03 11:41:28

标签: android realm listener

我目前正在使用Realm 3.0.0更新。我希望功能能够检测现有频道列表中的所有删除,插入和修改。因此,我正在使用OrderedRealmCollectionChangeListener监听器和我的RealmResult,如下所示:

final RealmResults<Channel> persistedChannels = realmRepository.getPersistedChannels();

    persistedChannels.addChangeListener(new OrderedRealmCollectionChangeListener<RealmResults<Channel>>() {
        @Override
        public void onChange(RealmResults<Channel> collection, OrderedCollectionChangeSet changeSet) {
            OrderedCollectionChangeSet.Range[] deletions = changeSet.getDeletionRanges();
            for (int i = deletions.length - 1; i >= 0; i--) {
                OrderedCollectionChangeSet.Range range = deletions[i];
                Log.d(TAG, "onDelete() called with: range startIndex = [" + range.startIndex + "]");
                Log.d(TAG, "onDelete() called with: range length = [" + range.length + "]");

                for (int j = range.startIndex; j < (range.startIndex + range.length); j++) {
                    Log.d(TAG, "onChange() called with: collection " +
                            "= [" + collection.get(j).getChannelName() + "]");
                }
            }

            OrderedCollectionChangeSet.Range[] insertions = changeSet.getInsertionRanges();
            for (OrderedCollectionChangeSet.Range range : insertions) {
            }

            OrderedCollectionChangeSet.Range[] modifications = changeSet.getChangeRanges();
            for (OrderedCollectionChangeSet.Range range : modifications) {
            }
        }
    });

我从link

找到了上述参考资料

问题是我最初有5条记录,所以持久化的频道领域结果是在插入范围内为我提供起始索引5和长度为0。但是当我删除最后一个条目时,在删除时,集合大小为我提供了4并导致indexoutofbound异常。

我认为我的初始RealmResult存储在collection或persistedchannels数组中的某个位置,但是在删除之后它们的大小都是4并且我无法找到我必须执行某些操作的已删除条目。

请问任何人可以解释返回的集合集和OrderedRealmCollectionChangeListener在这里发生了什么,让我指导正确的路径吗?

由于

0 个答案:

没有答案