これは、ビットマップを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メソッドにありますか?ヘルプや提案はありますか?