听录音,然后用RxJava订阅发送
我经常遇到这样的情况:我希望能够通过RxJava监听对请求的响应。问题是,我不确定如何设置Observable,以便监听事件并以正确的顺序在subscribe上发送消息。我不想先发送消息,然后再收听,因为如果线程挂起或响应速度过快,我可能会错过它。这是我能想到的最接近我自己的听录音,然后用RxJava订阅发送,java,android,concurrency,rx-java,Java,Android,Concurrency,Rx Java,我经常遇到这样的情况:我希望能够通过RxJava监听对请求的响应。问题是,我不确定如何设置Observable,以便监听事件并以正确的顺序在subscribe上发送消息。我不想先发送消息,然后再收听,因为如果线程挂起或响应速度过快,我可能会错过它。这是我能想到的最接近我自己的 connection.onReceivedMessage() .doOnSubscribe(() -> connection.send(message)) .filter(me
connection.onReceivedMessage()
.doOnSubscribe(() -> connection.send(message))
.filter(message -> message.id == id)
... // do stuff
或
但这些看起来仍然像我仍然可以发送信息,而不是倾听回应。还有其他人试过这样做吗?我觉得我真的需要一种后创建()
我不想发送消息,然后听,因为,如果线程
被暂停或响应非常快,我可能会错过它
使用主题
。BehaviorSubject
(始终向新订阅者发出最新的可观察对象)或ReplySubject
(向新订阅者发出所有可观察对象
)。我不确定整个逻辑,但你可以有这样的想法:
public BehaviorSubject mMessageBehaviorSubject = BehaviorSubject.create();
private void sendMessage() {
connection.onReceivedMessage()
.doOnSubscribe(() -> connection.send(message))
.filter(message -> message.id == id)
.subscribe(mSubject::onNext, Throwable::printStackTrace);
}
public Observable<String> getMessageObservable() {
return mMessageBehaviorSubject.asObservable();
}
public BehaviorSubject mMessageBehaviorSubject=BehaviorSubject.create();
私有void sendMessage(){
connection.onReceivedMessage()的连接
.doOnSubscribe(()->connection.send(message))
.filter(message->message.id==id)
.subscribe(mSubject::onNext,Throwable::printStackTrace);
}
公共可观察getMessageObservable(){
返回mMessageBehaviorSubject.asObservable();
}
通过这种方式,您可以发送消息,并且无论何时您准备好收听,您都会收到最新发送的消息。在这种情况下,doOnSubscribe正是您所需要的,它是您正在寻找的“后创建”。在您的第一个示例中,第一条消息将在订阅后发送,此时可观察对象已经准备好处理响应
至于你的问题——还有其他人试过这样做吗答案是肯定的。我使用与您的第一个示例相同的技术来解析一些代码 doOnSubscribe就是这样工作的?我将不得不对这个进行更多的测试。我承认我从未做过单元测试来验证。
public BehaviorSubject mMessageBehaviorSubject = BehaviorSubject.create();
private void sendMessage() {
connection.onReceivedMessage()
.doOnSubscribe(() -> connection.send(message))
.filter(message -> message.id == id)
.subscribe(mSubject::onNext, Throwable::printStackTrace);
}
public Observable<String> getMessageObservable() {
return mMessageBehaviorSubject.asObservable();
}