在某些(全部?)三星设备(Galaxy S5,S3)上Picasso不显示图库中的图像。
这是代码:
File[] picFiles = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).listFiles();
File file = picFile[0];
我试过了:
Picasso.with(getActivity()).load(Uri.fromFile(file)).into(imageView);
以及
Picasso.with(getActivity()).load("file://" + file.getAbsolutePath()).into(imageView);
无济于事。在所有非三星设备上,两个片段都可以正常工作:
文件的路径与其他设备没有什么不同,例如:
/storage/emulated/0/Pictures/JPEG_20150706_112313_826588781.jpg
这可能是什么问题?
编辑:是的我添加了android.permission.READ_EXTERNAL_STORAGE
。该文件存在,图像在图库应用程序中可见。
编辑2:这是毕加索的实力:
07-13 07:22:22.817 14648-14921/xy I/dalvikvm﹕ "Picasso-/storage/emulated/0/Pictures/JPEG_20150713_071858_-1853613631.jpg" prio=5 tid=51 RUNNABLE
07-13 07:22:22.817 14648-14921/xy I/dalvikvm﹕ at com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:142)
07-13 07:22:22.817 14648-14921/xy I/dalvikvm﹕ at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217)
07-13 07:22:22.817 14648-14921/xy I/dalvikvm﹕ at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159)
07-13 07:22:22.817 14648-14921/xy I/dalvikvm﹕ at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411)
07-13 07:22:23.167 14648-14918/xy﹕ "Picasso-/storage/emulated/0/Pictures/JPEG_20150713_071858_-1853613631.jpg" prio=5 tid=49 RUNNABLE
07-13 07:22:23.167 14648-14918/xy﹕ at com.squareup.picasso.BitmapHunter.transformResult(BitmapHunter.java:558)
07-13 07:22:23.167 14648-14918/xy﹕ at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:232)
07-13 07:22:23.167 14648-14918/xy﹕ at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159)
07-13 07:22:23.167 14648-14918/xy﹕ at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411)
似乎并未真正揭示图像未显示的原因。
Picasso版本是2.5.2,我可以在安装了Android 4.4.4的Samsung S3和安装了Android 5.0的Samsung S5上重现错误。
UIL加载相同的图片就好了,所以这可能是Picasso中的一个错误,我可能会在他们的github上提交错误报告。
最后编辑:问题实际上是一个OOM异常,因为我过滤了我的LogCat错误的关键字。我现在对自己很惭愧。
picasso.load().fit().into()
正常工作,正在显示图像。谢谢你的帮助。
答案 0 :(得分:3)
您最有可能加载非常大的图像,这可能会导致OutOfMemoryError
。您可以调整Bitmap
的大小并保持宽高比。
获取位图的宽度和高度而不将其加载到内存中的示例:
File file = new File("/path/to/some/picture.jpg");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file.getAbsolutePath(), options);
int width = options.outWidth;
int height = options.outHeight;
告诉Picasso调整图片大小以避免OutOfMemoryError
:
if (width > MAX_WIDTH || height > MAX_HEIGHT) {
Picasso.with(context).load(uri)
.resize(MAX_WIDTH, MAX_HEIGHT)
.centerInside()
.into(yourImageView);
}