Как использовать setImageUri () на Android - PullRequest
18 голосов
/ 06 октября 2010

Можете ли вы помочь мне, пожалуйста? Я пробовал:

ImageButton imgbt=(ImageButton)findViewById(R.id.imgbutton);
Uri imgUri=Uri.parse("/data/data/MYFOLDER/myimage.png");
imgbt.setImageUri(imgUri);

но я ничего не видел, просто пустая кнопка.

Ответы [ 7 ]

14 голосов
/ 06 февраля 2012

ImageView.setImageUri работает только для локального Uri, то есть ссылки на файл локального диска, а не URL-адреса изображения в сети.

Вот пример того, как получить битовую карту из сети,

    private Bitmap getImageBitmap(String url) {
        Bitmap bm = null;
        try {
            URL aURL = new URL(url);
            URLConnection conn = aURL.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();
       } catch (IOException e) {
           Log.e(TAG, "Error getting bitmap", e);
       }
       return bm;
    } 

Получив растровое изображение от getImageBitmap (), используйте: imgView.setImageBitmap (bm);

7 голосов
/ 06 октября 2010

должно быть

Uri imgUri=Uri.parse("file:///data/data/MYFOLDER/myimage.png");
3 голосов
/ 23 августа 2014

Как насчет этого:

Bitmap bitmap = BitmapFactory.decodeFile(fullFileName);
imgProfileImage.setImageBitmap(bitmap);
1 голос
/ 04 декабря 2018

Я тоже встречался с этой проблемой, ничего не показывало. Я видел что-то подобное в Android-разработчике. Он не использовал setImageURI.

private Bitmap getBitmapFromUri(Uri uri, Context context) throws IOException {
    ParcelFileDescriptor parcelFileDescriptor =
            context.getContentResolver().openFileDescriptor(uri, "r");
    FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
    Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
    parcelFileDescriptor.close();
    return image;
}

Только для справки.

1 голос
/ 12 августа 2015

Лучше всего избегать построения пути вручную, попробуйте:

imgbt.setImageUri(Uri.fromFile(new File("/data/data/....")));
0 голосов
/ 11 февраля 2018

Я решил это с помощью фреймворка. Добавил эту строку в Gradle:

implementation 'com.facebook.fresco:fresco:1.8.0'

Init singlton в классе приложения (или другом основном классе в вашем приложении)

Fresco.initialize(applicationContext)

И в конце используйте его.

XML:

 <com.facebook.drawee.view.SimpleDraweeView
  android:id="@+id/avatar"
  android:layout_width="110dp"
  android:layout_height="110dp" /> 

Java

avatar.setImageURI(user.getAvatarUrl())
0 голосов
/ 20 января 2016
 String imgPath = Environment.getDataDirectory() + "/data/com.wariyum.signage/files/"+ "221215-085656.619.72.jpg";

    //Following lines was expected work, but don't really show up image always - no idea why
    //imgZoom.setImageURI(Uri.parse(imgPath)); 

    //following works always perfectly
            File imgFile = new  File(imgPath);
            if(imgFile.exists()){
                Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                imgZoom.setImageBitmap(myBitmap);
            }
...