首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在rxjava和rxandroid中的可观察的正确解释

在rxjava和rxandroid中的可观察的正确解释
EN

Stack Overflow用户
提问于 2018-04-27 11:58:40
回答 1查看 42关注 0票数 0

observables和观察者在RxJava中的正确概念和工作原理是什么?我被字面意思弄糊涂了。每当我更改observables的值时,它的相应观察者就不会被调用--我将更深入地解释这种情况,最初,当我为一个observable分配一个字符串列表(列表)并将其订阅给一个观察者时,观察者工作得很好,但在那之后,当我更改list的值(例如向list中添加更多的字符串值)时,...the观察者的next应该自动被正确地调用。但事实并非如此,试图在安卓系统中实现。我会很高兴得到一些帮助的。

EN

回答 1

Stack Overflow用户

发布于 2018-04-27 13:35:01

Observables使用来自Observer的三种方法:onNextonErroronCompleted。当您从列表中创建Observable并订阅它时,可观察到的将使用onNext方法发出这些值,当它完成时,它将调用onCompleted方法。

你不能通过改变你给一些可观测运算符的列表来改变那些可以观察到的值。你想要什么行为。是Observable发出列表更改中的所有元素,还是只发出新的更改。

此可观察到的setCollection方法将发出对集合的所有更改:

代码语言:javascript
代码运行次数:0
运行
复制
public class CollectionObservable<T> extends Observable<T> {

    private Collection<T> collection;
    private List<Observer<? super T>> observers;

    public CollectionObservable(Collection<T> collection) {
        if (collection != null) {
            this.collection = collection;
        }
        this.observers = new ArrayList<>(2);
    }

    public Collection<T> getCollection() {
        return collection;
    }

    public void setCollection(Collection<T> collection) {
        this.collection = collection;
        emitValuesToAllObserver();
    }

    public void complete() {
        if (this.collection != null) {
            for (Observer<? super T> observer : this.observers) {
                observer.onComplete();
            }
        }
    }

    @Override
    protected void subscribeActual(Observer<? super T> observer) {
        this.observers.add(observer);
        emitValues(observer);
    }

    private void emitValuesToAllObserver() {
        for (Observer<? super T> observer : this.observers) {
            emitValues(observer);
        }
    }

    private void emitValues(Observer<? super T> observer) {
        if (this.collection != null) {
            for (T obj : this.collection) {
                observer.onNext(obj);
            }
        }
    }
}

注意,要完成手动操作,必须调用complete方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50061933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档