2016-01-12 3 views
1

Après avoir choisi une image de la galerie je veux uploadé avec retrofit2.Android: comment obtenir le chemin de fichier réel de l'image Uri de la galerie?

https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server

pour ce faire, je dois obtenir le chemin du fichier réel.

allImgUris.get (0) me donne:

content://com.android.providers.downloads.documents/document/5 

allImgUris.get (0) .getPath() me donne:

/document/5 

je dois passer le réel chemin du fichier à:

File file = new File(allImgUris.get(0)); 

j'ai trouvé un Beaucoup de réponses supposées 'bonnes' concernant les fonctions traitant du contexte et des curseurs mais aucune d'entre elles ne fonctionne.

une idée de comment résoudre ce problème?

ressemble à quelque chose de très trivial, mais se avère manger des heures de temps de recherche.

toute aide serait grandement appréciée!

ne fonctionne pas:

  Cursor cursor = getApplicationContext().getContentResolver().query(allImgUris.get(0), null, null, null, null); 
      if (cursor == null) { 
       selectedImagePath = allImgUris.get(0).getPath(); 
      } else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       selectedImagePath = cursor.getString(idx); // ava.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 
       cursor.close(); 
      } 

donne:

Java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 

Aussi ne fonctionne pas:

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(); 
     } 
    } 
} 

String selectedImagePath = getRealPathFromURI(getApplicationContext(),allImgUris.get(0)); 

renvoie la valeur null

Répondre