observables
中RxJava
和观察员的正确概念和工作是什么?我对字面意思这个词感到困惑。每当我更改observables
的值时,其相应的观察者都没有被调用,即我将更深入地解释这种情况,最初当我为observable
分配一个字符串列表(列表列表)和订阅时对于观察者来说,观察者工作得很好,但在那之后,当我更改list的值时(例如,将更多的String值添加到列表中)...下一个观察者应该自动被调用...但它不是#39;吨。尝试在 Android原生中实施。我会很乐意为你提供一些帮助。
答案 0 :(得分:1)
Observables
使用Observer
中的三种方法:onNext
,onError
和onCompleted
。当您从列表中创建Observable
并且您订阅它时,Observable将使用onNext
方法发出这些值,当它完成时,它将调用onCompleted
方法。
您无法通过更改为某些Observable运算符指定的列表来更改Observable正在发出的值。你想要的行为是什么? Observable
应该在列表更改时发出所有元素,还是只发出新的更改。
此observable将通过setCollection
方法发出对集合的所有更改:
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
方法。