我正在开发一个Android项目,我在其中使用自定义ListView,左侧是图像 我使用Genymotion模拟器,工作正常。图像完美显示: Screenshot from Genymotion emulator
然而,当我在我的设备上使用该应用程序(华为P8 Lite)时,没有显示任何内容:Screenshot from device
我尝试在我的设备上调试应用程序,图像路径存在(否则它们将是“无图像可用”)ans是: / storage / emulated / 0 / Pictures / JPEG_20160415_134349_- 350854394.jpg
我去了Android设备监视器,图像存在,但路径略有不同(mnt / shell /而不是/ storage /,但我不认为这是真正的问题,是吗?)
堆栈跟踪中没有任何“OutOfMemory”错误或任何其他错误
这是我用来显示图片的代码:
if(values.get(position).getImgList().size()==0){
imageView.setImageResource(R.drawable.nopics);
}
else {
//getImg() return the path (string) of the first image in a ArrayList of path
imageView.setImageBitmap(values.get(position).getImg());
}
我很确定getImg()会返回一个图像,因为当我将图像发送到Web服务时,我使用相同的方法。网络服务正确接收图像 我的Android Manifest中也有读/写内部/外部存储。
编辑:我忘记了布局代码:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:layout_width="200px"
android:layout_height="200px"
android:layout_marginLeft="40px"
android:layout_marginRight="10px"
android:layout_marginTop="4px">
</ImageView>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="70px"
android:layout_marginLeft="10px"
android:text="@+id/label"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:textSize="48px" >
</TextView>
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/croixrouge"
android:src="@drawable/croixrouge"
android:layout_alignBottom="@+id/label"
android:layout_marginBottom="50px"
android:layout_alignEnd="@+id/label" />
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/option"
android:src="@drawable/modif"
android:layout_alignTop="@+id/croixrouge"
android:layout_toStartOf="@+id/croixrouge"
android:layout_marginRight="5px"/>
<ImageButton
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/refresh"
android:src="@drawable/refreshpurple"
android:layout_alignTop="@+id/option"
android:layout_toStartOf="@+id/option"
android:layout_marginRight="5px" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10px"
android:id="@+id/sublabel"
android:text="@+id/sublabel"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:textSize="32px"/>
</LinearLayout>
</LinearLayout>
getImg()代码:
public Bitmap getImg() {
if(imgList.size() !=0) {
Bitmap bmp = BitmapFactory.decodeFile(imgList.get(0));
return bmp;
}
return null;
}
编辑:我如何选择图片: protected void onActivityResult(int requestCode,int resultCode, Intent imageData){ super.onActivityResult(requestCode,resultCode,imageData);
switch (requestCode) {
case Define.ALBUM_REQUEST_CODE:
if (resultCode == RESULT_OK) {
path = imageData.getStringArrayListExtra(Define.INTENT_PATH);
...
}
}
}
后来:
r.setImgList(path);
有人可以帮我理解为什么图像不会显示在真实设备上吗?
答案 0 :(得分:0)
当您尝试在ImageView上加载具有更高分辨率的图像时会发生这种情况。您必须将其缩小为多种尺寸(ldpi,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi)以支持多种屏幕分辨率和尺寸。
请参阅此link
答案 1 :(得分:0)
您可以使用此辅助方法获取图像的真实路径。在getImg()方法中,传递从辅助方法创建的路径:
public Bitmap getImg() {
if(imgList.size() != 0) {
Uri uri = Uri.parse(imgList.get(0));
String path = getRealPathFromUri(getActivity(), uri)
Bitmap bmp = BitmapFactory.decodeFile(path);
return bmp;
}
return null;
}
public String getRealPathFromURI(Context context, Uri uri) {
String path;
if ("content".equals(uri.getScheme())) {
path = getRealPathFromContentURI(context, uri);
} else if ("file".equals(uri.getScheme())) {
path = uri.getPath();
} else {
path = uri.toString();
}
return path;
}
private String getRealPathFromContentURI(Context context, Uri contentUri) {
if (contentUri == null) {
return null;
}
String[] proj = { MediaStore.Images.Media.DATA };
CursorLoader loader = new CursorLoader(context, contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
if (cursor == null) {
return null;
}
int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
if (column_index == -1) {
cursor.close();
return null;
}
String path;
if (cursor.moveToFirst()) {
path = cursor.getString(column_index);
} else {
path = null;
}
cursor.close();
return path;
}
答案 2 :(得分:0)
解决了问题!
我缩放了位图。看起来它不适合屏幕或其他东西......
public Bitmap getImg() {
if(imgList.size() !=0) {
Bitmap bmp = BitmapFactory.decodeFile(imgList.get(0));
int nh = (int) ( bmp.getHeight() * (800.0 / bmp.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bmp, 600, nh, true);
return scaled;
}
return null;
}
感谢您的帮助