Android RxJava取消对'的请求;单个.fromCallable',一次性.清除导致的中断异常

Android RxJava取消对'的请求;单个.fromCallable',一次性.清除导致的中断异常,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,我在我的应用程序中使用RxJava和AWS API网关 代码如下: @Override public Single<SearchResponse> searchPostsApiCall(String keyword, String offset) { return Single.fromCallable(() -> client.postSearch(keyword,offset)); } // to call api getCompo

我在我的应用程序中使用RxJava和AWS API网关

代码如下:

    @Override
    public Single<SearchResponse> searchPostsApiCall(String keyword, String offset) {
        return Single.fromCallable(() -> client.postSearch(keyword,offset));
    }

// to call api
getCompositeDisposable().add(searchPostsApiCall(keyword,offset)
                .subscribeOn(getSchedulerProvider().io())
                .observeOn(getSchedulerProvider().ui())
                .subscribe(response -> onResponseReceived(response, offset, finalType), this::onError)
        );
如何实现保存命中率的目标?任何想法都是值得欣赏的


谢谢

一些API通过抛出无法中继的异常来响应取消。如果这样的崩溃是一致的,比如您总是从这样的API中得到
InterruptedIOException
,那么您可以专门忽略这样的异常,这样RxJava就不会知道它们了

通过
fromCallable
实现这一点有些困难,因为您必须返回非null的内容,但可能无法创建所涉及类型的实例。因此,我建议使用create:

Single.create(发射器->{
试一试{
onSuccess(client.postSearch(关键字,偏移量));
}捕获(InterruptedIOException ex){
//忽略
}捕获(可丢弃的ex){
发射极误差(ex);
}
});
编辑如果您可以创建ąn
SearchResponse
,您可以使用callable中的

Single.fromCallable(()->{
试一试{
返回client.postSearch(关键字,偏移量);
}捕获(InterruptedIOException ex){
//fromCallable实际上不会发出此消息
返回新的SearchResponse();
}
});

既然是发射器,它是否会停止观察成功/错误?请也看看:有没有办法降低开销为什么我应该看自己的答案?因为你提到“fromCallable”比“create”更重要。这个问题与崩溃无关。
'ApiClientException: java.io.InterruptedIOException: thread interrupted'