java - 位图内存不足错误

标签 java android html parsing

我对此错误有疑问。

我从 URL 制作 favicon 解析器。我这样做是这样的:

public class GrabIconsFromWebPage {
public static String replaceUrl(String url) {
    StringBuffer sb = new StringBuffer();
    Pattern p = Pattern.compile("https?://.+\\..+?\\/");
    Matcher m = p.matcher(url);
    while (m.find()) {
        sb.append(m.group());
    }
    return sb.toString();
}

public static String getFavicon(String url) throws IOException {
    try {
        Document doc = Jsoup.connect(url).get();
        Element element = doc.head().select("link[href~=.*\\.(ico|png)]").first();
        if (element != null) {
            if (element.attr("href").substring(0, 2).contains("//")) {
                return "http:" + element.attr("href");
            } else if (element.attr("href").substring(0, 4).contains("http")) {
                return element.attr("href");
            } else {
                return replaceUrl(url) + element.attr("href");
            }
        } else {
            return "";
        }
    } catch(IllegalArgumentException ex) {
        ex.printStackTrace();
    } catch(OutOfMemoryError er) {
        er.printStackTrace();
    }
    return "";
}

public static Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

}

以及如何从 url 获取位图

Bitmap faviconBitmap = GrabIconsFromWebPage.getBitmapFromURL(
                                GrabIconsFromWebPage.getFavicon(
                                        bookmarkData.get(position).getUrl() // url from which I want to grab favicon
                                )
                        );

上传 20 张图片后,这段代码给了我 OutOfMemoryError 错误。我怎样才能解决这个问题?或者优化?因为在我显示此图标的列表中,可以有超过 20 或 40 个图标...

最佳答案

我想,你会使用universal image loader

给定代码 fragment 的方法

// Load image, decode it to Bitmap and return Bitmap synchronously 
ImageSize targetSize = new ImageSize(80, 50); 
// result Bitmap will be fit to this size
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);

对于内存不足的情况,您可以在 list 文件中添加一行

<application
        ...
        android:largeHeap="true"
        ...
        >
</application>

关于java - 位图内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035286/

相关文章:

java - Android:日期对话框在 onDateChange 上获取

java - MySQL PersistenceException, Play 中的 "Connection is closed"! 2.2

java - 获取 JSOUP 上的索引不起作用

java - ActivityOptions 在某些 Android 版本上返回 NoClassDefFoundError

java - 一个界面如何用于不同的后台android任务?

html - 如何在这种复杂的 float 广告情况下使 <div> 居中对齐

Javascript - 素数函数问题,内存过载

java - 使用 Iterator 时出现 ConcurrentModificationException

html - 关于在 MS Access 数据库中存储带有表格和图像的可搜索文档的建议

c# - 如何在 Xamarin Android C# 中将两个 Activity 安装为一个应用程序