如何处理Observable RxJava中的处理
我正在实现如何处理Observable RxJava中的处理,java,android,rx-java,rx-android,rx-java2,Java,Android,Rx Java,Rx Android,Rx Java2,我正在实现Observable它应该只是从网络下载一个文件,分为多个部分 这是我的实现 private static class MultipartDownloadObservable extends Observable<String> implements Cancellable { @Override protected void subscribeActual(Observer<? super String> observer) {
Observable
它应该只是从网络下载一个文件,分为多个部分
这是我的实现
private static class MultipartDownloadObservable extends Observable<String> implements Cancellable {
@Override
protected void subscribeActual(Observer<? super String> observer) {
// Start loading
subscriber = observer;
progressBundle = new ProgressBundle<>();
startDownloading();
}
@Override
public void cancel() throws Exception {
if (!lastDownloadingInfo.isFinish()) {
okHttpClient.dispatcher().queuedCalls().stream().filter(call -> call.request().tag().equals(url)).forEach(Call::cancel);
}
if (subscriber != null) {
subscriber.onComplete();
}
}
}
然而,它抛出了一个错误
java.io.InterruptedIOException: thread interrupted
我如何正确地执行处理
可观察的?我已经尝试实现Canceble
接口,但是没有调用cancel
方法。注意java.io.InterruptedIOException:thread interrupted
不是来自rx。这是java.io的一个例外。对于您的dispose()
操作,rxJava将被迫取消订阅,并在网络请求执行期间中断线程
您不能真正告诉可观察对象取消网络请求,因为rxJava不知道可观察对象内部运行的代码。您可以使用doUnsubscribe
检查网络请求是否仍在运行,如果是取消,则在需要取消时取消订阅。请注意java.io.interruptedeException:thread interrupted
不是来自rx。这是java.io的一个例外。对于您的dispose()
操作,rxJava将被迫取消订阅,并在网络请求执行期间中断线程
您不能真正告诉可观察对象取消网络请求,因为rxJava不知道可观察对象内部运行的代码。您可以使用dounsubscribe
检查网络请求是否仍在运行,如果是取消,则在您想要取消时取消订阅。没有理由扩展Observable
。改用Observable.create()
。一些经典的API通过中断异常来响应取消;您不能对此做太多,只能抑制它。@akarnokd,谢谢,但我需要捕获此异常以取消请求。没有理由扩展Observable
。改用Observable.create()
。一些经典的API通过中断异常来响应取消;您不能对它做太多,只能抑制它。@akarnokd,谢谢,但我需要捕获此异常才能取消请求
java.io.InterruptedIOException: thread interrupted