DisposableSingleObserver/DisposableObserver
의 단일 인스턴스 만 생성하고 아래의 스트림에서 subscribeWith()
메서드를 통해이를 통과시킴으로써 Observer를 단일 관찰 가능한 스트림에 재사용하려고합니다.처형 된 관찰자를 사용하여 소스를 다시 구독하지 않습니다.
그래서 나는 조금 아래와 같이 코드를 수정 :io.reactivex.exceptions.ProtocolViolationException : : : 나는 메시지와 함께 하나의 관찰자 인스턴스를 여러 번 가입하려고 할 때
public class SomeClass { private DisposableSingleObserver<Object> observer; public SomeClass() { observer = new DisposableSingleObserver<Object>() { @Override public void onSuccess(Object object) { ... } @Override public void onError(Throwable throwable) { ... } }; } public void doSomeStuff() { singleStream.subscribeOn(...) .observeOn(...) .subscribeWith(observer); } }
위의 코드는
ProtocolViolationException
결과 승 가입 할 수 없습니다 i (n) com.package.name.SomeClass $ 1 여러 번. com.package.name.SomeClass $ 1의 새로운 인스턴스를 생성하고 대상 소스에 대신 등록하십시오.
public class SomeClass {
...
public void doSomeStuff() {
if (observer != null) {
observer.dispose();
}
singleStream.subscribeOn(...)
.observerOn(...)
.subscribeWith(observer);
}
}
내가의 ProtocolViolationException
이 더 이상 발생 된 위의 코드를 실행하고 나는 성공적으로 단일 스트림에서 이벤트를 얻을 수있었습니다합니다. 그러나 doSomeStuff()
방법으로 전화를 걸려고하면 첫 번째 호출에서는 성공적으로 완료되었지만 두 번째 호출에서는 어떤 이벤트도 내 보내지 않았습니다. 구독이 모두 doOnSubscribe()
을 통해 발생했음을 확인할 수 있었지만 단일 스트림에 대한 코드 방출 이벤트는 두 번째 호출에서 결코 실행되지 않았습니다. 그래서 세 가지 질문이 있습니다.
- 왜 처음에
ProtocolViolationException
이 던 졌나요? - 두 경우 모두 소스를 구독 했는데도 첫 번째 구독에서는 이벤트를 가져올 수 있지만 두 번째 구독에서는 이벤트를 가져올 수없는 이유는 무엇입니까?
- 단일 인스턴스 만 사용하여 관찰자를 재사용하려면 어떻게해야합니까?
1 및 2도 'DisposableObserver'에 해당됩니까? 약 3, Observers에 대한 인스턴스의 수를 제한하려고합니다. – Harry
나는 그 사람들을 "그 사촌"이라고 불렀다. – akarnokd