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;
    }
}

そしてこれはSDカードからそれを取得して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;
}

私はすでにスタックオーバーフロー全体を検索し、この問題に関連する答えを見つけました。問題は、尋ねられた質問が1つの静止画像/ファイルを参照していたことです。photo私の場合、システムは本番環境にあり、オブジェクトがnullであり、NullPointerExceptionがインラインでスローされるとBugsenseから通知されることがありますphoto.compress(Bitmap.CompressFormat.JPEG, 100, stream);。を渡すため、ファイルが存在しますphotoPath.exists()

私は何を間違えたのでしょうか?問題はsaveメソッドまたはloadメソッドにありますか?ヘルプや提案はありますか?

4

0 に答える 0