2016-08-06 1 views
0

я показываю в моей деятельности простой ImageView:ImageView проблема загрузки: работает в эмуляторе, не работает в реальном устройстве

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.package.name.EditPicture"> 

    <ImageView 
     android:id="@+id/problem_picture" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

В моем классе активности, это то, как я устанавливаю изображение:

//first calculate the width and height of the screen 
DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int height = displaymetrics.heightPixels; 
int width = displaymetrics.widthPixels; 

//Then, resize the image's width and height equal to that of the screen: 
Picasso.with(this).load(new File(pictureLocation)).rotate(90f).resize(height,width).into(imageView); 

проблема, я получаю желаемый результат в эмуляторе, но в моей реальной андроид телефон, ничего не отображается. Весь экран пуст.

Поскольку я уже изменяю размер изображения по размеру экрана, не должно возникать никаких проблем при загрузке изображения с высоким разрешением. Почему мой экран пуст, а затем в реальном устройстве?

+0

Другие данные дисплея или нет – vinoth12594

+0

В моем макете есть только один ImageView, никаких других данных. –

+0

Как вы получаете изображение на локальном или сервере? – vinoth12594

ответ

0

После небольшого исследования, здесь причина и решение:

экран будет пустым в реальном устройстве, поскольку ImageView не может загрузить большой -ass image (с камерой 13MP, изображения были 3-4 MB). Я попробовал меньшее изображение (~ 100 КБ), и это сработало очень хорошо. Печально, что ни Пикассо, ни Глейд не смогли это сделать.

Поэтому я сначала изменить размер изображения, а затем прессуют их падать в пределах 100 КБ (Вам нужен другой подход, если вы хотите полный HD изображение):

/** 
* getting the screen height and width, so that we could resize the image accordingly 
*/ 
DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int height = displaymetrics.heightPixels; 
int width = displaymetrics.widthPixels; 


/** 
* Getting the old photo and then resizing it to the size of the screen. 
* We are also compressing it. 70 is a number between 0 to 100. 
* You see, close to 0 means very low quality but very small in size image 
* Close to 100 means very high quality, but the size will be big. 
*/ 
Bitmap photo = BitmapFactory.decodeFile(pictureLocation); 
photo = Bitmap.createScaledBitmap(photo, width, height, false); 
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
photo.compress(Bitmap.CompressFormat.JPEG, 70, bytes); 


/** 
    * fetching the location where this has to be saved. folder location is the location of my Pictures folder. 
    */ 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String smallFileLocation = folderLocation + File.separator + "IMG_" + timeStamp + ".jpg"; 

    /** 
    * New file is saved at this place now. 
    */ 
    File f = new File(smallFileLocation); 
    f.createNewFile(); 
    FileOutputStream fo = new FileOutputStream(f); 
    fo.write(bytes.toByteArray()); 
    fo.close(); 


    /** 
    * Later, we can simply put the picture in our ImageView using Picasso or just imageView.setImageBitmap 
    */ 
    Picasso.with(this).load(new File(smallFileLocation)).rotate(90f).resize(height,width).into(imageView); 
0

Первое контрольное изображение доступно на устройстве.

File file = new File(pictureLocation); 
if (file.exists()) { 
    Picasso.with(this).load(new File(pictureLocation)).into(imageView); 
} else { 
    Log.d("Result", "Image not available"); 
} 
+0

Спасибо за ответ, но файл уже существует на моем устройстве, и у меня также есть разрешение на его чтение. Вопрос в том, работает ли код в эмуляторе Android M, почему он не работает на реальном устройстве. –

+0

Указать pictureLocation данные – vinoth12594

+0

Как говорят журналы, '/ storage/emulated/0/Pictures/MyCameraApp/IMG_20160806_170840.jpg' является местонахождение. Я посмотрел на свой телефон, вручную подтвердил, что он там. Затем я проверил журналы для существования для того же самого. –

 Смежные вопросы

  • Нет связанных вопросов^_^