Не удалось выбрать несколько фотографий из галереи на Android

Я вызываю приложение галереи по умолчанию из своего приложения, чтобы выбрать любую фотографию. Ниже мой код, чтобы получить выбранный путь изображения из галереи. Он работает отлично для всех фотографий, кроме немногих. Когда я выбираю любую из загруженных фотографий PICASA из галереи, приложение закрывает действие. Пожалуйста, помогите мне.

Внутри onActivityResult () ….

Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String selectedPhotoPath = cursor.getString(columnIndex).trim(); <<--- NullPointerException here cursor.close(); bitmap = BitmapFactory.decodeFile(selectedPhotoPath); ...... 

Иногда data.getData(); Возвращает null в зависимости от приложения, которое вы используете для получения изображения. onActivityResult для этого является использование вышеуказанного кода в onActivityResult :

 /** *Retrieves the path of the image that was chosen from the intent of getting photos from the galery */ Uri selectedImageUri = data.getData(); // OI FILE Manager String filemanagerstring = selectedImageUri.getPath(); // MEDIA GALLERY String filename = getImagePath(selectedImageUri); String chosenPath; if (filename != null) { chosenPath = filename; } else { chosenPath = filemanagerstring; } 

Переменная chosenPath будет иметь правильный путь для выбранного изображения. Метод getImagePath() заключается в следующем:

 public String getImagePath(Uri uri) { String selectedImagePath; // 1:MEDIA GALLERY --- query from MediaStore.Images.Media.DATA String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); if (cursor != null) { int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); selectedImagePath = cursor.getString(column_index); } else { selectedImagePath = null; } if (selectedImagePath == null) { // 2:OI FILE Manager --- call method: uri.getPath() selectedImagePath = uri.getPath(); } return selectedImagePath; } 

Попробуйте ниже код

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK){ Uri targetUri = data.getData(); textTargetUri.setText(targetUri.toString()); Bitmap bitmap; try { bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); .... } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

ИЛИ

Пожалуйста, проверьте ниже ссылку

ИЛИ

Как выбрать изображение из галереи (SD-карта) для моего приложения?

 String ImagePath = ""; private void setImageFromGallery(Intent data) { Uri selectedImage = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = this.getContentResolver().query(selectedImage, filePathColumn, null, null, null); if (cursor != null) { cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); Log.i("choosepath", "image" + picturePath); ImagePath = picturePath; } else { ImagePath = selectedImage.getPath(); // Add this line }   ImageView imgView = (ImageView) findViewById(R.id.imgView);   imgView.setImageBitmap(BitmapFactory.decodeFile(imagePath)); Bitmap bitmap = Utilities.rotateImage(pictureImagePath); } 

Текущая система Android (первая версия -> 2.3.3 -> даже 4.4.2) выглядит как неспособная выделить несколько файлов, поэтому для этого вам нужна настраиваемая галерея.

Afer исследовал так много раз, я обнаружил, что Custom Camera Gallery library может помочь вам в этом.