var result = ""
withContext(Dispatchers.IO) {
if (bitmap != null) {
try {
val bytes = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes)
val dir = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "ArtAdda")
dir.mkdirs()
val f = File(dir , "${System.currentTimeMillis() / 1000}" + ".png")
val fo = FileOutputStream(f)
fo.write(bytes.toByteArray())
fo.flush()
fo.close()
result = f.absolutePath
runOnUiThread {
if (result.isNotEmpty()) {
Toast.makeText(this@MainActivity, "File saved successfully: $result", Toast.LENGTH_LONG).show()
}
}
} catch (e: Exception) {
result = ""
e.printStackTrace()
}
}
}
任何人都可以告诉我为什么我的代码不起作用,在这里我试图将应用程序中存在的图像保存在手机的 dcim 文件夹中
您可能无权在该目录中写入内容。或者您可能没有添加必要的权限来清单。可能是这个,但不确定;
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
尝试调试它以查看详细错误。
请在 catch 中使用更多相关的异常类,而不是 Exception 基类。您还可以使用多个捕获。尝试首先列出最专业的异常的捕获,否则 (e: Exception) 将捕获所有异常。
catch (e : ExceptionClass1) {
some code
}
catch (e: ExceptionClass2) { //less specialised than ExceptionClass1
some code
}
catch (e: Exception) { //least specialised
some code
}
考虑使用Kotlin的use函数来自动关闭FileOutputStream。 和 确保您拥有写入外部存储所需的权限,特别是对于强制执行范围存储的 Android 10(API 级别 29)及更高版本。 加 确保 FileOutputStream 在 finally 块中关闭,以防止资源泄漏。 来源:-chatgpt