我正在开发一个Android应用程序,它从Web服务获取以base 64编码的图像,并在ImageView中显示它。
我的问题是图像在模拟器上正确显示,但是当在平板电脑上运行时(平板电脑ASUS Transformer with Android 4),ImageView在加载图像时似乎消失了。
这是我用来加载ImageView的代码:
ImageView imageView = (ImageView) this.findViewById(R.id.floor_map_view);
Bitmap image = BitmapFactory.decodeByteArray(result, 0, result.length);
imageView.setImageBitmap(image);
图像是从Web服务中正确获取的,正如我所说,它在模拟器上正确加载,而且我已经将接收到的基本64字符串与从我的Web服务发送的字符串进行了比较。
这是我的活动布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#ffffff">
<ImageView
android:contentDescription="floorMapView"
android:id="@+id/floor_map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="#222222"
/>
</LinearLayout>
任何想法可能会发生什么?
谢谢。
编辑:在BitmapFactory.Options对象中使用inSampleSize并在decodeByteArray调用中使用它会使图像显示,但是,正如预期的那样,它应该比它应该小。
答案 0 :(得分:1)
显然这是一个内存问题,用一个低的inSample值解决了它。这不是理想的,但至少它现在有效。 Strange out of memory issue while loading an image to a Bitmap object 令人失望,我认为iOS处理图像很糟糕。
答案 1 :(得分:0)
我要做的第一件事是使用调试器检查调试器和模拟器中imageView
和image
的运行时值,看它们是否有所不同。如果他们这样做,深入了解调用堆栈以查明原因,可能是资源在一个环境中不在同一个位置,或者是多种原因中的任何一个。
如果事实证明图像正在加载到活动中,请使用HierarchyViewer检查活动的布局元素,并查看丢失视图的发生情况(如果它甚至完全丢失)。
答案 2 :(得分:0)
在AndroidManifest.xml文件中添加此行
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>