2

这是我将位图保存到 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方法上?有什么帮助或建议吗?

4

0 回答 0