如何在android中将图片网址转换为位图时解决java.lang.OutOfMemoryError异常?

时间:2015-02-13 07:58:26

标签: java android bitmap

这是我写的从url到位图获取图像的方法,每当我使用Handler向下滚动主视图时我都会运行

public void setimage(final ImageView imageview, final String urll,final int postion)
{

new Thread(new Runnable() 
 {

    @Override
    public void run() 
    {
        URL url = null;
        try {
            url = new URL(urll);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            final Bitmap myBitmap = BitmapFactory.decodeStream(input);

            handler.post(new Runnable() 
            {
                @Override
                public void run() {

                    imageview.setImageBitmap(Bitmap.createScaledBitmap(myBitmap, 160, 140, true));
                }
            });

            web.get(postion).setImage(myBitmap);

        }
        catch (IOException e) 
        {
            e.printStackTrace();

        }

    }

}).start();

}

每当我向下滚动以查看logcat

中的更多图像时,这是我在自定义适配器中获得的异常
  

java.lang.OutOfMemoryError   android.graphics.BitmapFactory.nativeDecodeStream(Native Method)

请让我知道我在哪里做错了

4 个答案:

答案 0 :(得分:2)

您可以使用

请求使用更多内容
android:largeHeap="true"
清单中的

参考:How to solve java.lang.OutOfMemoryError trouble in Android

答案 1 :(得分:1)

你可以使用decodeStream的重载,在第三个参数中接受BitmapOptions来缩小尺寸和图像的质量。

查看this

希望这可以帮到你。

答案 2 :(得分:1)

这两个答案真的不太好。大堆可能意味着什么。在某些设备上它会没问题,有些设备会赢。 Android不提供有关此堆有多大的任何信息。如果您的位图非常大,则应将其下载到ram内存中,而不是下载到flash(某些文件)。而不是立即阅读它缩小。在此方法中,您还可以免费使用缓存实现:)

请查看此文章http://developer.android.com/training/displaying-bitmaps/index.html

答案 3 :(得分:-1)

在放入此行之前设置位图

的System.gc();