我正在使用以下代码从服务器下载图像:
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]);
}
你可以看到,在这个周期中没有什么异常
在完成一个位图之后,但在加载下一个位图之前,请尝试调用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
你看到了什么?
尝试更改路径的顺序-再次仅第一个可以吗?如果没有,问题出在文件中。如果是,则在连接/流/工厂中。