如何解决与输出流交互时不适当的阻塞方法调用
我通过执行以下操作将图像保存到存储中:
private fun finallySave() {
if (imageView.drawable != null) {
scopeForSaving.launch { saveToStorage() }
} else {
Toast.makeText(this,"Please load image first",Toast.LENGTH_SHORT).show()
}
}
private suspend fun saveToStorage() {
var outFile: File? = null
withContext(Dispatchers.IO) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val resolver = this@MainActivity.contentResolver
val contentValues = ContentValues().apply {
put(
MediaStore.MediaColumns.DISPLAY_NAME,"Draw_Easy " + System.currentTimeMillis() + ".png"
)
put(MediaStore.MediaColumns.MIME_TYPE,"image/jpeg")
put(MediaStore.MediaColumns.RELATIVE_PATH,"DCIM/Draw Easy")
}
val uri =
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues)
uri?.let { uri1 ->
resolver.openOutputStream(uri1).use {
((imageView.drawable as BitmapDrawable).bitmap).compress(
Bitmap.CompressFormat.PNG,100,it
)
}
}
outFile = (uri?.path)?.let { File(it) }
} else {
try {
outFile =
File(
getImageDirectory(),"Draw_Easy " + System.currentTimeMillis() + ".png"
)
val outputStream = outFile?.let { FileOutputStream(it) }
((imageView.drawable as BitmapDrawable).bitmap).compress(
Bitmap.CompressFormat.PNG,outputStream
)
outputStream?.flush()
outputStream?.close()
scanFile(outFile!!,"image/png")
} catch (e: java.lang.Exception) {
Log.e("TAG","Failed",e)
}
}
}
Toast.makeText(
this@MainActivity,"Image Saved to ${outFile?.absolutePath}",Toast.LENGTH_LONG
).show()
}
无论在代码中与输出流进行交互时,尽管运行withContext(Dispatchers.IO)的“所谓的”阻塞方法调用,它仍会给我“不适当的阻塞方法调用”错误。
编辑:scopeForSaving
的逻辑如下:
private var job = Job() //initialization of job
private var scopeForSaving = CoroutineScope(job + Dispatchers.Main)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。