在我的 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, 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
}
})