当我的应用程序首次启动时,它会让用户选择一个个人资料照片。可以通过拍照或从图库中选择完成此操作。
用户获取照片后,必须将其保存在设备的内部存储器中,并在应用程序中用作用户的个人资料照片。
这个过程很好地运行,用户获取了图片并在保存之前显示在ImageView中。但是,我在将图像保存在内部存储器中时遇到了一些问题。我尝试了几种方法,大多数似乎都有效。但是当我尝试时,图片没有被保存,或者至少我找不到保存它的文件夹。
我已经尝试了以下三种方法:
第一种:
据说,图像保存在路径:
用户获取照片后,必须将其保存在设备的内部存储器中,并在应用程序中用作用户的个人资料照片。
这个过程很好地运行,用户获取了图片并在保存之前显示在ImageView中。但是,我在将图像保存在内部存储器中时遇到了一些问题。我尝试了几种方法,大多数似乎都有效。但是当我尝试时,图片没有被保存,或者至少我找不到保存它的文件夹。
我已经尝试了以下三种方法:
第一种:
File directory = getDir("profile", Context.MODE_PRIVATE);
File mypath = new File(directory, "thumbnail.png");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
mybitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
第二点:
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
mybitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes);
FileOutputStream fos = null;
try {
fos = openFileOutput("thumbnail.png", Context.MODE_PRIVATE);
fos.write(bytes.toByteArray());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
第三点:
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
mybitmap.compress(Bitmap.CompressFormat.PNG, 90, bytes);
File fileWithinMyDir = new File(getFilesDir(), "thumbnail.png");
try {
FileOutputStream fos = new FileOutputStream(fileWithinMyDir);
fos.write(bytes.toByteArray());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
据说,图像保存在路径:
android/data/AppName/app_data/
,但那里没有创建文件夹。无论如何,我已经查看了其他文件夹,但是没有找到。
编辑-
在第一种方法中,我发现它会抛出一个异常:E/SAVE_IMAGE﹕ /data/data/com.example.myapp/app_profile/thumbnail.png: open failed: EISDIR (Is a directory)
java.io.FileNotFoundException: /data/data/com.example.myapp/app_profile/thumbnail.png: open failed: EISDIR (Is a directory)
Caused by: libcore.io.ErrnoException: open failed: EISDIR (Is a directory)