Create File from Uri type android
Uri currImageURI = data.getData();
printing currImageURI will give you some thing like this:
content://media/external/images/media/47
But what we need is the absolute path of that particular image . So we need to get real path from uri
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
Now modifiy your code like
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
// currImageURI is the global variable I’m using to hold the content:
currImageURI = data.getData();
//Save the currImageUri (URI type) to global variable.
photosHolder.getInstance().setOneIm(getRealPathFromURI(getActivity(),currImageURI));
}
}
}
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
Related videos on Youtube
Comments
-
Chlebta almost 2 years
I'm trying to select image from gallery then convert this image to File and send it via HttpPost but I'm getting always
FileNotFoundException
. This my Code :Selecting the photo
public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { // currImageURI is the global variable I’m using to hold the content: currImageURI = data.getData(); //Save the currImageUri (URI type) to global variable. photosHolder.getInstance().setOneIm(currImageURI); } } }
Converting the photo
// First Try File myFile = new File((photosHolder.getInstance().getOneIm()).toString()); params.put("visit_report[photos_attributes][0][file]",myFile); **The exception Raised here // second try File myFile2 = new File((photosHolder.getInstance().getOneIm()).getPath()); params.put("visit_report[photos_attributes][1][file]",myFile2); ** Also here
And those are myFiles Value while debuging :
mFile : content:/com.android.providers.media.documents/document/image%3A19143 myFile2 : /document/image:19143
So any help ?
Update I have tried this solution also :
//get The real path from uri then save it (and then use it to create the file) photosHolder.getInstance().setUriString(getRealPathFromURI(currImageURI)); //Convert the image URI to the direct file system path of the image file private String getRealPathFromURI(Uri contentURI) { String result = ""; try { Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path result = contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); result = cursor.getString(idx); // Exception raised HERE cursor.close(); } } catch (Exception e) { e.printStackTrace(); } return result; }
But I got
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it
and theidx
var == to-1
Also I have tried @Praneeth Kalluri Solution but it returns always null as result.
-
Chlebta over 9 yearsThe function you gave is always returning null .