2017-04-10 1 views
0

Je suis en train de charger une image dans un ImageView de la galerie en utilisant Picasso.Impossible de charger Image à partir du fichier: // chemin dans Picasso

Voici le code

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode!= Activity.RESULT_OK) return; 

     switch (requestCode) { 
      case PICK_GALLERY_IMAGE_REQUEST: { 
       Uri imageUri = data.getData(); 
       Log.d(DEBGUG_TAG,"Image URI: "+imageUri.toString()); 


       Picasso picasso = Picasso.with(getApplicationContext()); 
       picasso.setLoggingEnabled(true); 
       picasso.load(imageUri).error(R.drawable.c).into(testImgView, new com.squareup.picasso.Callback(){ 

        @Override 
        public void onSuccess() { 
         Log.d(DEBGUG_TAG,"Success loading image from uri:PICASSO"); 
        } 

        @Override 
        public void onError() { 
         Log.d(DEBGUG_TAG,"Cannot load image"); 
        } 
       }); 

Le problème est tout en sélectionnant une image de la galerie retourne un chemin de fichier

D/debug: Image URI: file:///storage/emulated/0/DCIM/Camera/IMG_20170126_211524.jpg

Ce qui ne semble pas travailler avec Picasso retours erreur et enregistre D/debug: Cannot load image dans la méthode d'erreur. Cependant, le choix de la même image d'une autre application qui renvoie Uri comme: D/debug: Image URI: content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F90455/ORIGINAL/NONE/1757236944 est réussi.

Un moyen de charger l'image à partir du chemin du fichier?

+0

Dans quelle version de SDK votre application est en cours d'exécution? S'il vous plaît vérifier le logcat si vous obtenez 'FileUriExposedException' – tahsinRupam

Répondre

5

Dont fichier utiliser: // simplement l'utiliser comme fichier :

Uri targetUri = data.getData(); 
      if (data.toString().contains("content:")) { 
       imagePath = getRealPathFromURI(targetUri); 
      } else if (data.toString().contains("file:")) { 
       imagePath = targetUri.getPath(); 
      } else { 
       imagePath = null; 
      } 

public String getRealPathFromURI(Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     cursor = 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(); 
     } 
    } 
} 
+0

Je recevais le fichier en utilisant' File file = new File (String.value (uri)); ', cela a fonctionné quand Je l'ai changé pour 'File file = new File (uri.getPath());'. Merci. –

+0

vous êtes les bienvenus –

2

Essayez le code suivant:

File imgFile = new File("/sdcard/Images/test_image.jpg"); 

if(imgFile.exists()){ 

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest); 

    myImage.setImageBitmap(myBitmap); 

} 
1

Essayez ImageView méthode intégrée de setImageURI pour les fichiers locaux

testImgView.setImageURI(Uri.parse(imageUri)); 
+0

Nope, même problème, suppose qu'il ne s'agit pas de picasso: P –