我的项目中有一个类来上传图像并保存在我的数据库中,如果成功,则将其保存在本地。这可行,我可以将图像保存在我在我的 android 手机上创建的自定义文件夹中。
但是,在另一堂课中,我正在尝试以文本形式下载编码图像并使用我上面使用的方法将其保存在本地,但它不再起作用了。看来我无法创建文件夹。
我不明白它是如何在我的其他班级而不是在这个班级工作的
我尝试检查我的清单文件,看看我是否包含了所需的权限以及它们是否在正确的位置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="buenaventura.dorothy.tbmgmtapp">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/lungs"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
tools:replace="android:icon">
...
[编辑]好的,我尝试删除文件路径中的空格以检查空格是否真的是导致问题的原因,但它仍然没有工作
File folder = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM) + File.separator + "TBSystem" + File.separator + patient_id + File.separator + "lab_result_" + sqlDateToString(result_date) + ".jpg");
另外,它怎么能在我的另一个有空格的班级上工作,而不是在这个班级上? :(
File folder = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM) + File.separator + "TB System" + File.separator + patient_id);
if (!folder.exists()) {
folder.mkdirs();
}
folder = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM) + File.separator + "TB System" + File.separator + patient_id + File.separator + "lab_result_" + result_date + ".jpg");
byte[] decodedBytes = Base64.decode(encoded_image, 0);
Bitmap imageBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
try (
FileOutputStream out = new FileOutputStream(folder)) {
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (IOException e) {
e.printStackTrace();
}
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/DCIM/TB System/pat1/lab_result_2019-04-06.jpg (No such file or directory)
W/System.err: at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:308)
at java.io.FileOutputStream.<init>(FileOutputStream.java:238)
at java.io.FileOutputStream.<init>(FileOutputStream.java:180)
at buenaventura.dorothy.tbmgmtapp.db_volley.VolleyDownloadRequest$1.onResponse(VolleyDownloadRequest.java:569)
at buenaventura.dorothy.tbmgmtapp.db_volley.VolleyDownloadRequest$1.onResponse(VolleyDownloadRequest.java:103)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:82)
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:29)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
patient_id 和 result_date 只是字符串。 encoded_image 是一个 lontext
我需要能够将我下载的编码文本转换为位图并将其保存在我希望在 DCIM 中找到的自定义文件夹“TB System”中。应在 TB System 中创建另一个文件夹(即 pat1、pat2、pat3、...),并将图像保存在其中。
我看到您使用的路径在“TB”和“System”之间包含一个空格,这可能会导致问题。您的其他类是否也包含带空格的文件路径?如果没有,这可能是问题所在。
在处理文件路径中的空格时查看这个有助于处理的 other question 。答案从未得到批准,所以我不确定是否真的解决了这个问题,但他们提到了这段代码: