我有一个像contact contentprovider这样的数据库,因为用户可以捕获每个联系人的图像,捕获后,我将图像编码到base64并保存到文件中,并用文件的路径更新该图像字段,并且如果用户在线,则将所有联系人同步到服务器,并且我在需要时从服务器获取所有这些数据,而我从文件中获取图像我面临outofmemory异常base64,如果我将图像保存在数据库是解决问题的?
答案 0 :(得分: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);
}