这是我将位图保存到 sdcard 的代码:
public static boolean savePhoto(String fileName, Bitmap photo) {
deleteOldPhotos();
File sdCardPath = new File(MyApplication.getSDCardPathForPhotos());
if (!sdCardPath.exists())
sdCardPath.mkdirs();
File destination = new File(sdCardPath, fileName);
try {
FileOutputStream out = new FileOutputStream(destination);
photo.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
这用于从 sdcard 中检索它并转换为 Base64 字符串:
public static String getEncodedPhoto(String filename) {
File photoPath = new File(MyApplication.getSDCardPathForPhotos(), filename);
if (photoPath.exists()) {
Bitmap photo = BitmapFactory.decodeFile(photoPath.getAbsolutePath());
setBugSenseExtraCrashData(filename, photoPath, photo);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] photoByteArray = stream.toByteArray();
String photoBase64 = Base64.encodeToString(photoByteArray, Base64.DEFAULT);
return photoBase64;
} else
return null;
}
我已经搜索了整个 stackoverflow 并找到了与此问题相关的答案,问题是所提出的问题是引用一个静态图像/文件。在我的情况下,系统正在生产中,有时我得到 Bugsense 告诉我photo
对象为 null 并且 NullPointerException 被抛出photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
。该文件存在是因为它通过了photoPath.exists()
.
我做错了什么?问题出在save方法还是load方法上?有什么帮助或建议吗?