Обработка ошибок Rx в Completable.fromCallable

#android #rx-java #rx-kotlin #rx-java-completable

Вопрос:

В моем приложении для Android я пытаюсь сохранить файл с потоком ввода и вывода из решателя содержимого. Я использую эту функцию saveImageExternal в Rx Completable.fromCallable, и я получил исключение FileNotFoundException, потому что мой uri был неправильным, но функция onError от моего наблюдателя не была вызвана, а функция Completable завершена. Почему не был вызван onError? Может кто-нибудь объяснить?

 private fun saveImageExternal(file: File, uri: Uri, context: Context) {
        val resolver = context.contentResolver
        val outputStream = FileOutputStream(file)
        val inputStream = resolver.openInputStream(uri)
        val buffer = ByteArray(4096)
        var length: Int
        if (inputStream != null) {
            while (inputStream.read(buffer).also { length = it } > 0) {
                outputStream.write(buffer, 0, length)
            }
            outputStream.flush()
        }

    }
 
 Completable.fromCallable { saveImageExternal(file, uri, context) }
            .subscribeOn(Schedulers.io())
            .subscribe(object : CompletableObserver{
                override fun onSubscribe(d: Disposable) {
                    Timber.d("onSubscribe")
                }

                override fun onComplete() {
                   Timber.d("onComplete")
                }

                override fun onError(e: Throwable) {
                    Timber.d("onError") // never called 
                }

            })
 

Комментарии:

1. Судя по фрагменту кода, он должен был вызвать onError , как и ожидалось. Где именно это FileNotFoundException указывает на его последовательность?