Я пытаюсь вынести фото я взял с следующий класс, который возвращает используемый файл:Android; BitmapFactory.decodeFile (файл) возвращает нуль, файл, как известно, существует
public File takePhoto(){
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File destination= null;
try {
destination = createFile();
} catch (IOException error) {
Log.v(TAG, "IO error, reading exception");
String errorMessage = error.getMessage();
Log.v(TAG, errorMessage);
String errorCauseMessage = error.getCause().getMessage();
Log.v(TAG, errorCauseMessage);
}
if (destination != null){
Log.v(TAG, "destination was written");
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination));
parentActivity.startActivityForResult(pictureIntent, REQUEST_TAKE_PHOTO);
Log.v(TAG, "destination was: " + destination.getAbsolutePath());
}
else {
Log.v(TAG, "destination was not written");
}``
return destination;
Результат затем используется в следующий код:
Log.v(TAG, "adding picture");
PhotoHandler photoHandler = new PhotoHandler(getPackageManager(), PolishCreateActivity.this);
File imgFile = photoHandler.takePhoto();
if (imgFile == null) {
Toast.makeText(this, ERROR_TOAST_TEXT, Toast.LENGTH_SHORT).show();
} else {
Log.v(TAG, "Picture added");
Log.v(TAG, "storing directory");
img = imgFile.getAbsolutePath();
Log.v(TAG, "Directory stored");
Log.v(TAG, "Displaying picture");
LinearLayout layout = (LinearLayout) findViewById(R.id.rootLayout);
if (imageViewExists == Boolean.TRUE) {
ImageView oldView = (ImageView) findViewById(R.id.imageViewID);
layout.removeView(oldView);
}
UIHelper uiHelper = new UIHelper(this.getApplicationContext());
ImageView imageView = uiHelper.getImageViewFromPath(imgFile);
imageView.setId(R.id.imageViewID);
layout.addView(imageView);
imageViewExists = Boolean.TRUE;
Log.v(TAG, "picture displayed");
И перешел к этому методу, так как imgFile:
public ImageView getImageViewFromPath(File imgFile) {
ImageView imageView = new ImageView(context);
Bitmap imgBM = null;
if (imgFile.exists()) {
Log.v(TAG, "image file exists");
imgBM = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
if (imgBM == null){
Log.v(TAG, "Bitmap returned was null");
}
}
imageView.setImageBitmap(imgBM);
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Log.v(TAG, "ImageView was created");
return imageView;
}
проблема заключается в том, что BitmapFactory.decode Файл (imgFile.getAbsolutePath) возвращается каждый раз, когда я его запускаю, даже несмотря на то, что файл существует (я могу сказать, потому что получаю сообщения журнала в блоке if ifm imgFile.exists()). Я долго искал решение, но я не нашел решения. Я тестировал, что это не вызывает исключение outOfMemory, которого нет. Любая помощь будет оценена по достоинству.
Может вы лучше используете свою проблему? –
Вы уверены: imgFile не имеет значения. И getAbsolutePath() возвращает правильный путь и не является ни пустой, ни пустой? –
Да, imgFile не равно null, а getAbsolutePath() возвращает правильный путь. –