将位图从片段保存到内部/外部存储 [英] Saving bitmap from fragment to internal/external storage
问题描述
将位图从片段保存到内部/外部存储时,我遇到以下异常
I was getting the following exception while Saving bitmap from fragment to internal/external storage
11-28 12:09:18.667: W/System.err(2620): java.io.FileNotFoundException: /storage/sdcard0/req_images/Image-296.jpg: open failed: ENOENT (No such file or directory)
11-28 12:09:18.717: W/System.err(2620): at libcore.io.IoBridge.open(IoBridge.java:427)
11-28 12:09:18.717: W/System.err(2620): at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
11-28 12:09:18.717: W/System.err(2620): at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
11-28 12:09:18.717: W/System.err(2620): at com.example.multipletab5.AnswerFragment.saveimage(AnswerFragment.java:133)
11-28 12:09:18.717: W/System.err(2620): at com.example.multipletab5.AnswerFragment.access$0(AnswerFragment.java:112)
11-28 12:09:18.717: W/System.err(2620): at com.example.multipletab5.AnswerFragment$2.onClick(AnswerFragment.java:81)
11-28 12:09:18.717: W/System.err(2620): at android.view.View.performClick(View.java:4147)
11-28 12:09:18.717: W/System.err(2620): at android.view.View$PerformClick.run(View.java:17161)
11-28 12:09:18.717: W/System.err(2620): at android.os.Handler.handleCallback(Handler.java:615)
11-28 12:09:18.717: W/System.err(2620): at android.os.Handler.dispatchMessage(Handler.java:92)
11-28 12:09:18.717: W/System.err(2620): at android.os.Looper.loop(Looper.java:213)
11-28 12:09:18.717: W/System.err(2620): at android.app.ActivityThread.main(ActivityThread.java:4787)
11-28 12:09:18.717: W/System.err(2620): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 12:09:18.717: W/System.err(2620): at java.lang.reflect.Method.invoke(Method.java:511)
11-28 12:09:18.717: W/System.err(2620): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
11-28 12:09:18.717: W/System.err(2620): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
11-28 12:09:18.717: W/System.err(2620): at dalvik.system.NativeStart.main(Native Method)
11-28 12:09:18.727: W/System.err(2620): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
11-28 12:09:18.727: W/System.err(2620): at libcore.io.Posix.open(Native Method)
11-28 12:09:18.727: W/System.err(2620): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
11-28 12:09:18.727: W/System.err(2620): at libcore.io.IoBridge.open(IoBridge.java:411)
11-28 12:09:18.727: W/System.err(2620): ... 16 more
我的目的是将图形从片段保存到Android设备.我一直在尝试在Activity类中使用相同的方法,并且可以正常工作.但是,当我尝试在片段类中使用它时,它不起作用.
My aim is to save a drawing from my fragment to my android device. I have been trying to use the same approach in Activity class and it work. However when i try to use it in fragment class, it does not worked.
该应用程序没有崩溃,仅显示此错误日志.
The app didn't crash it just display this error log.
这是代码:
View content = v;
content.setDrawingCacheEnabled(true);
bitmap = content.getDrawingCache();
File file;
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/req_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
file = new File(myDir, fname);
//Log.i(TAG, "" + file);
if (file.exists())
file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
推荐答案
我认为您已经在创建文件后删除了该文件,然后尝试将不存在的文件转换为无效的位图.这就是为什么出现错误而找不到这样的文件或目录的原因.
I think you are already deleting the file after creating it and then you are trying to convert the non-exists file into the bitmap which is not valid. That is why you are getting an error no such file or directory found.
只需从代码中删除行file.delete();
,然后尝试一下.
Just remove the line file.delete();
from your code and try out.
这篇关于将位图从片段保存到内部/外部存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!