BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions) returns FileNotFoundException
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions) returns FileNotFoundException
我正在尝试显示通过存储在 external SD-card
.
中的相机意图(触发内置相机应用程序)捕获的图片
文件路径和文件名存储在字符串变量'mCurrentPhotoPath'
。
我已使用 ES File Explorer
应用验证捕获的图像存储在 'mCurrentPhotoPath'
指定的位置,但 BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions)
始终返回 FileNotFoundException
。这是我存储捕获图像的代码:
private void addPicToGallery() {
File f = new File(mCurrentPhotoPath);
//for debug purpose only
Log.i(MYTAG, "value of mCurrentPhotoPath in addPicToGallery: " +mCurrentPhotoPath);
Log.i(MYTAG, "value of f in addPicToGallery: " +f);
Uri contentUri = Uri.fromFile(f);
//for debug only
Log.i(MYTAG, "value of contentUri in addPicToGallery: " +contentUri);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}
用于解码缩放图像以在 ImageView
中显示的代码:
private void setFullImageFromFilePath() {
Log.i(MYTAG, "Entered setFullImageFromFilePath method");
// Get the dimensions of the View
int targetW = mImageView.getWidth();
int targetH = mImageView.getHeight();
Log.i(MYTAG,"var targetW in setFullImageFromFilePath is:" +targetW);
Log.i(MYTAG,"the targetH in setFullImageFromFilePath is:" + targetH);
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
Log.i(MYTAG, "the mCurrentPhotoPath in setFullImageFromFilePath is:" + mCurrentPhotoPath);
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW= bmOptions.outWidth;
int photoH = bmOptions.outHeight;
//Determine how much to scale down the image
int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
//Decode the image file into a Bitmap sized to fill the view
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
mImageView.setImageBitmap(bitmap) ;
}
但是,BitmapFactory.decodeFile
无法在 mCurrentPhotoPath
中存储的位置找到文件,导致 FileNotFoundException
。
以下是 LogCat 输出:
>07-20 21:28:11.897 32301-32301/org.assignment.lab.Pic I/Lab-Intents﹕ the mCurrentPhotoPath in setFullImageFromFilePath is:file:/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg
07-20 21:28:11.907 32301-32301/org.assignment.lab.Pic E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /file:/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg: open failed: ENOENT (No such file or directory)
07-20 21:28:11.937 32301-32301/org.assignment.lab.Pic D/AndroidRuntime﹕ Shutting down VM
07-20 21:28:11.937 32301-32301/org.assignment.lab.Pic W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418d0ce0)
07-20 21:28:12.047 32301-32301/org.assignment.lab.Pic E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: org.assignment.lab.Pic, PID: 32301
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {org.assignment.lab.mydailyselfie/org.coursera.assignment.lab.Pic.MainActivity}: java.lang.ArithmeticException: divide by zero
我正在 Android Kitkat 4.4.4
phone.
中调试此应用程序
请建议 BitmapFactory.decodeFile
方法需要进行哪些修改,以便它可以获取存储的文件并在 ImageView
中显示它。
提前致谢。
您的 mCurrentPhotoPath
有一个前缀“file:
”。
因此系统正在尝试引用 /file:/storage/sdcard0/etc...
,它指向未安装的磁盘。
删除它并用
重试
mCurrentPhotoPath = "/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg";
或者,如果您的 mCurrentPhotoPath
总是有前缀,请在使用前执行此操作
mCurrentPhotoPath = mCurrentPhotoPath.replace("file:", "");
希望对您有所帮助! :)
我正在尝试显示通过存储在 external SD-card
.
文件路径和文件名存储在字符串变量'mCurrentPhotoPath'
。
我已使用 ES File Explorer
应用验证捕获的图像存储在 'mCurrentPhotoPath'
指定的位置,但 BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions)
始终返回 FileNotFoundException
。这是我存储捕获图像的代码:
private void addPicToGallery() {
File f = new File(mCurrentPhotoPath);
//for debug purpose only
Log.i(MYTAG, "value of mCurrentPhotoPath in addPicToGallery: " +mCurrentPhotoPath);
Log.i(MYTAG, "value of f in addPicToGallery: " +f);
Uri contentUri = Uri.fromFile(f);
//for debug only
Log.i(MYTAG, "value of contentUri in addPicToGallery: " +contentUri);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}
用于解码缩放图像以在 ImageView
中显示的代码:
private void setFullImageFromFilePath() {
Log.i(MYTAG, "Entered setFullImageFromFilePath method");
// Get the dimensions of the View
int targetW = mImageView.getWidth();
int targetH = mImageView.getHeight();
Log.i(MYTAG,"var targetW in setFullImageFromFilePath is:" +targetW);
Log.i(MYTAG,"the targetH in setFullImageFromFilePath is:" + targetH);
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
Log.i(MYTAG, "the mCurrentPhotoPath in setFullImageFromFilePath is:" + mCurrentPhotoPath);
BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
int photoW= bmOptions.outWidth;
int photoH = bmOptions.outHeight;
//Determine how much to scale down the image
int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
//Decode the image file into a Bitmap sized to fill the view
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scaleFactor;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
mImageView.setImageBitmap(bitmap) ;
}
但是,BitmapFactory.decodeFile
无法在 mCurrentPhotoPath
中存储的位置找到文件,导致 FileNotFoundException
。
以下是 LogCat 输出:
>07-20 21:28:11.897 32301-32301/org.assignment.lab.Pic I/Lab-Intents﹕ the mCurrentPhotoPath in setFullImageFromFilePath is:file:/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg
07-20 21:28:11.907 32301-32301/org.assignment.lab.Pic E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /file:/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg: open failed: ENOENT (No such file or directory)
07-20 21:28:11.937 32301-32301/org.assignment.lab.Pic D/AndroidRuntime﹕ Shutting down VM
07-20 21:28:11.937 32301-32301/org.assignment.lab.Pic W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418d0ce0)
07-20 21:28:12.047 32301-32301/org.assignment.lab.Pic E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: org.assignment.lab.Pic, PID: 32301
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {org.assignment.lab.mydailyselfie/org.coursera.assignment.lab.Pic.MainActivity}: java.lang.ArithmeticException: divide by zero
我正在 Android Kitkat 4.4.4
phone.
请建议 BitmapFactory.decodeFile
方法需要进行哪些修改,以便它可以获取存储的文件并在 ImageView
中显示它。
提前致谢。
您的 mCurrentPhotoPath
有一个前缀“file:
”。
因此系统正在尝试引用 /file:/storage/sdcard0/etc...
,它指向未安装的磁盘。
删除它并用
重试mCurrentPhotoPath = "/storage/sdcard0/Pictures/JPEG_20150720_212749_-232171051.jpg";
或者,如果您的 mCurrentPhotoPath
总是有前缀,请在使用前执行此操作
mCurrentPhotoPath = mCurrentPhotoPath.replace("file:", "");
希望对您有所帮助! :)