0
private String getRealPathFromURI(Uri image) {
        String[] proj = { MediaStore.Images.Media.DATA };

        //This method was deprecated in API level 11
        //Cursor cursor = managedQuery(contentUri, proj, null, null, null);

        CursorLoader cursorLoader = new CursorLoader(
                this,
                image, proj, null, null, null);
        Cursor cursor = cursorLoader.loadInBackground();

        int column_index =
                cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);

    }
InsaneCat
  • 2,115
  • 5
  • 21
  • 40
sandy
  • 1
  • 4
  • CAn you please share crash details here? – Faldu Jaldeep Jul 26 '18 at 13:30
  • Caused by: java.lang.NullPointerException: uri at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:60) at android.content.ContentResolver.query(ContentResolver.java:474) at android.content.CursorLoader.loadInBackground(CursorLoader.java:64) at at – sandy Jul 26 '18 at 13:34
  • https://stackoverflow.com/questions/20324155/get-filepath-and-filename-of-selected-gallery-image-in-android Please check this link – Faldu Jaldeep Jul 26 '18 at 13:40

2 Answers2

0

Try this

private String getRealPathFromURI(String contentURI) {
            Uri contentUri = Uri.parse(contentURI);
            Cursor cursor = mContext.getContentResolver().query(contentUri, null, null, null, null);
            if (cursor == null) {
                return contentUri.getPath();
            } else {
                cursor.moveToFirst();
                int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                String str = cursor.getString(index);
                cursor.close();
                return str;
            }

        }

Check this

@SuppressLint("NewApi")
    public static String getRealPathFromURI(Context context, Uri uri) {
        String filePath = "";
        String wholeID = DocumentsContract.getDocumentId(uri);

        // Split at colon, use second item in the array
        String id = wholeID.split(":")[1];
        String[] column = {MediaStore.Images.Media.DATA};

        // where id is equal to
        String sel = MediaStore.Images.Media._ID + "=?";
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
        int columnIndex = cursor.getColumnIndex(column[0]);
        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }
        cursor.close();
        return filePath;
    }

Get URI from Camera

    private Uri capturedUri;


    public void openCamera() {
        Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createMediaFile(1);
        } catch (IOException ex) {
        }

        // Continue only if the File was successfully created
        if (photoFile != null) {
            capturedUri = null;
            capturedUri = Uri.fromFile(photoFile);
            takePicture.putExtra(MediaStore.EXTRA_OUTPUT, capturedUri);
            startActivityForResult(takePicture, 1);
        }
    }


   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == 1) {
                if ((null == data) || (data.getData() == null)) {
                    try {
                        Bitmap photo = MediaStore.Images.Media.getBitmap(getContentResolver(), capturedUri);
                        img_profileimage.setImageBitmap(photo);
                        capturedUri = getImageUri(context, photo);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    Toast.makeText(context, context.getResources().getString(R.string.some_thing_went_wrong), Toast.LENGTH_SHORT);
                }
            } else if (requestCode == 2) {
                if (data.getData() != null) {
                    //  Uri selectedImage = data.getData();
                    capturedUri = null;
                    capturedUri = data.getData();

                } else {
                    Toast.makeText(context, context.getResources().getString(R.string.some_thing_went_wrong), Toast.LENGTH_SHORT);
                }
            }
        }
    }


    public Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String picturePath = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Image", null);
        return Uri.parse(picturePath);
    }


    public File createMediaFile(int type) throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fileName = type == 1 ? "JPEG_" + timeStamp + "_" : "VID_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(type == 1 ? Environment.DIRECTORY_PICTURES : Environment.DIRECTORY_MOVIES);
        File file = File.createTempFile(fileName,  /* prefix */type == 1 ? ".jpg" : ".mp4",/* suffix */storageDir/* directory */);
        return file;
    }
Hardik Vasani
  • 876
  • 1
  • 8
  • 14
0
public static String getFilePathByUri(Context context, Uri uri) {

    String fileName = "";
    Uri filePathUri = uri;

    if (uri.getScheme().toString().compareTo("content") == 0) {

        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);

        if (cursor.moveToFirst()) {
            int column_index = cursor.getColumnIndexOrThrow("_data");
            filePathUri = Uri.parse(cursor.getString(column_index));
            fileName = filePathUri.getEncodedPath();
        }

        cursor.close();

    } else if (uri.getScheme().compareTo("file") == 0) {
        fileName = filePathUri.getEncodedPath();
    } else {
        fileName = fileName + "_" + filePathUri.getLastPathSegment();
    }
    return fileName;
}
Samet
  • 917
  • 12
  • 26