Créer un Fichier à partir de l'Uri de type android

Je suis en train de sélectionner une image à partir de la galerie puis de convertir cette image dans un Fichier et l'envoyer par HttpPost mais je suis toujours FileNotFoundException. Voici mon Code :

La sélection de la 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);
            }
        }
    }

La conversion de la 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

Et ceux qui sont myFiles de la Valeur alors que le débogage :

mFile : content:/com.android.providers.media.documents/document/image%3A19143
myFile2 : /document/image:19143

Sorte que toute aide ?


Mise à jour
J'ai essayé cette solution :

//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;
    }

Mais j'ai eu java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it et la idx var = = -1

J'ai également essayé @Praneeth Kalluri Solution, mais il renvoie toujours la valeur null comme résultat.

OriginalL'auteur Chlebta | 2014-11-24