나는 내 애플 리케이션을 android repository by Fernando Cejas에 짓고 있는데, dispose
을 호출 한 후 observable에 가입하는 데 문제가있다.처분 후 observable에 가입
내가 대시 보드에 왔을 때, 나는 방법은 단순히 내가 만들 내 소켓 구현에서이 return messageRepository.subscribeOnUserMessages(params);
같은 저장소를 호출 자식 클래스 SubscribeOnUserMessages
에서 UseCase
클래스
public void execute(DisposableObserver<T> observer, Params params) {
Preconditions.checkNotNull(observer);
final Observable<T> observable = this.buildUseCaseObservable(params)
.subscribeOn(Schedulers.from(threadExecutor))
.observeOn(postExecutionThread.getScheduler());
addDisposable(observable.subscribeWith(observer));
}
에 인 방법 subscribeOnUserMessages.execute(new Subscriber(), new Params(token))
전화 like
return Observable.create(emitter -> {
if (!isThereInternetConnection()) {
Timber.w("Network connection exception");
emitter.onError(new NetworkConnectionException());
return;
}
/*
* Open socket if not opened
*/
openSocket(params.getToken());
String channelName = CHANNEL_PRIVATE_USER + params.getAuthenticated().getUuid();
if (subscribedChannels.contains(channelName)) {
Timber.d("Channel %s is already subscribed", channelName);
return;
}
JSONObject auth;
try {
auth = createAuthJson(CHANNEL, channelName, params.getToken());
} catch (JSONException e) {
Timber.e("Couldn't create auth json");
emitter.onError(e);
return;
}
mSocket.emit(SUBSCRIBE, auth);
Timber.d("Emitted subscribe with channel: %s ", CHANNEL_PRIVATE_USER + params.getAuthenticated().getUuid());
subscribedChannels.add(CHANNEL_PRIVATE_USER + params.getAuthenticated().getUuid());
Timber.d("Subscribing on event: %s\n with user: %s", EVENT_USER_NEW_MESSAGE, params.getAuthenticated().getUuid());
if (mSocket.hasListeners(EVENT_USER_NEW_MESSAGE)) {
Timber.v("Socket already has listener on event: %s", EVENT_USER_NEW_MESSAGE);
return;
}
mSocket.on(EVENT_USER_NEW_MESSAGE, args -> {
if (args[1] == null) {
emitter.onError(new EmptyResponseException());
}
Timber.d("Event - %s %s", EVENT_USER_NEW_MESSAGE, args[1].toString());
try {
MessageEntity messageEntity = messageEntityJsonMapper.transform(args[1]);
emitter.onNext(messageEntity);
} catch (JSONException e) {
Timber.e(e, "Could not parse message json");
emitter.onError(e);
}
});
});
증상 a 내가 처음으로 모든 것을 구독 할 때 프리젠 테이션 레이어로 진행됩니다. 내가 두 번째 화면으로 이동 한 후 처분 할 때 나는 단지 소켓 구현으로 오는 로그를 보지만 돌아 가지 않습니다.
내 질문은 : 동일한 관찰 가능에 다시 구독 할 수있는 방법이 있습니까? 나는 이미 싱글 톤의 유스 케이스에 관측 가능 내용을 저장하고 그 관측 가능 부분에 가입하려고 시도했지만 도움이되지 않았습니다.
은 관찰 가능 객체에'.subscribe()'를 다시 호출합니다. –
동일한 관찰 대상에 다시 가입 하시겠습니까? Observable 또는 Observable입니까? 다시 구독하는 경우 어떤 결과를보고 싶습니까? –
'SocketImpl'은 소켓에서 메시지를 가져 오는 책임을지는 싱글 톤 객체입니다. –