我正在使用此代码从服务器下载图片:
public Bitmap getBitmap(String path){
URL url=new URL(path);
URLConnection connection=url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream is=connection.getInputStream();
Bitmap bmp=BitmapFactory.decodeStream(is);
return bmp;
}
它适用于1个图像,但是如果我在循环中使用它,在第二个,第三个等迭代时它返回一些奇怪的东西(位图的mWidth
和mHeight
字段是-1
)。 哪里可能出现问题?
(path
关于第二次,第三次等迭代很好,我查了一下)
修改
周期示例:
//images - is a String array
for(int i=0; i<images.length(); i++){
Bitmap bmp=getBitmap(images[i]);
}
你可以看到,在这个循环中没有什么不寻常的
答案 0 :(得分:1)
在完成一个位图之后但在加载下一个位图之前尝试调用Bitmap.recycle
。
问题是,甚至可能无济于事 - 位图无法自行调整大小。
也许,更好地制作位图数组 - 一个永远的路径。
我担心,由于优化而导致的java机器(或编译器)不会破坏先前的位图,但会尝试重用它。请在这里写一下结果。这很有意思。
尝试读取不读它们的图像大小:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap btemp = BitmapFactory.decodeFile(selectedImagePath,options);
使用下面的代码后获取高度和宽度:
options.outHeight for height
options.outWidth for width
你看到了什么?
尝试更改路径的顺序 - 再次只有第一个会好吗?如果没有,问题出在文件中。如果是,请在连接/流/工厂中。