Completable.fromCallable 中的 Rx 错误处理

问题描述

在我的 Android 应用程序中,我尝试使用 contentResolver 中的 input- 和 outputStream 保存文件。我在 Rx Completable.fromCallable 中使用了这个 saveImageExternal 函数,我得到了 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,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 
                }

            })

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)