Некоторые API реагируют на отмену, генерируя исключение, которое не может быть передано.Если такие сбои непротиворечивы, например, вы всегда получаете InterruptedIOException
от таких API, вы можете специально игнорировать такие исключения и, следовательно, RxJava не будет знать о них.
Этого несколько трудно достичь с помощью fromCallable
так как вы должны вернуть что-то ненулевое, но вы не сможете создать экземпляр соответствующего типа.Поэтому я предлагаю использовать create:
Single.create(emitter -> {
try {
emitter.onSuccess(client.postSearch(keyword,offset));
} catch (InterruptedIOException ex) {
// ignore
} catch (Throwable ex) {
emitter.onError(ex);
}
});
Edit Если вы можете создать ąn SearchResponse
, вы можете остаться с fromCallable
:
Single.fromCallable(() -> {
try {
return client.postSearch(keyword,offset);
} catch (InterruptedIOException ex) {
// fromCallable won't actually emit this
return new SearchResponse();
}
});