1

我有一个类似联系人 contentprovider 的数据库,因为该用户可以捕获每个联系人的图像,捕获后,我将图像编码为 base64 并保存到文件中,并使用文件的路径更新该图像字段,并同步所有如果用户在线,则与服务器的联系人,以及我在需要时从服务器获取所有这些数据,同时我从文件中获取图像时我面临内存不足异常 base64,如果我将图像保存在数据库中是解决问题?

4

1 回答 1

1

当您尝试对整个图像进行编码时,图像通常会在 Android 中导致 OutOfMemoryException。为此,以块的形式读取图像数据,然后在对块应用编码后将块保存在临时文件中。编码完成后,对编码的图像文件做任何你想做的事情。

这是从文件编码图像并使用块将其保存在文件中的代码..

    String imagePath = "Your Image Path";        
    String encodedImagePath = "Path For New Encoded File"; 
    InputStream aInput;
    Base64OutputStream imageOut = null;
    try {
        aInput = new FileInputStream(imagePath);

        // carries the data from input to output :
        byte[] bucket = new byte[4 * 1024];
        FileOutputStream result = new FileOutputStream(encodedImagePath);
        imageOut = new Base64OutputStream(result, Base64.NO_WRAP);
        int bytesRead = 0;
        while (bytesRead != -1) {
        // aInput.read() returns -1, 0, or more :
        bytesRead = aInput.read(bucket);
        if (bytesRead > 0) {
            imageOut.write(bucket, 0, bytesRead);
            imageOut.flush();
        }
        imageOut.flush();
        imageOut.close();
    } catch (Exception ex) {
        Log.e(">>", "error", ex);
    }
于 2013-01-08T15:31:31.640 回答