使用循环从URL加载图像

时间:2012-01-26 20:21:55

标签: java android stream bitmap bitmapfactory

我正在使用此代码从服务器下载图片:

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个图像,但是如果我在循环中使用它,在第二个,第三个等迭代时它返回一些奇怪的东西(位图的mWidthmHeight字段是-1 )。 哪里可能出现问题?

path关于第二次,第三次等迭代很好,我查了一下)

修改

周期示例:

//images - is a String array
for(int i=0; i<images.length(); i++){
    Bitmap bmp=getBitmap(images[i]);
}

你可以看到,在这个循环中没有什么不寻常的

1 个答案:

答案 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

你看到了什么?

尝试更改路径的顺序 - 再次只有第一个会好吗?如果没有,问题出在文件中。如果是,请在连接/流/工厂中。