0

ビットマップがある Android アプリがあり、それをアプリケーション データ フォルダーに保存したいと考えています。ファイルは実行後にそこにありますが、その 0kb で画像は含まれていません。

バグはどこですか?

これが私のコードです:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

File f = new File(projDir + File.separator + newPath);
try {
    f.createNewFile();
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
    fo.close();
} catch (IOException e) {
    e.printStackTrace();
}
4

4 に答える 4

2

追加fo.flush()

try {
   f.createNewFile();
   FileOutputStream fo = new FileOutputStream(f);
   fo.write(bytes.toByteArray());
   fo.flush()
   fo.close();
} catch (IOException e) {
   e.printStackTrace();
}
于 2012-10-08T13:25:08.773 に答える
0

を呼び出す必要はありcreateNewFile()ません。存在しない場合は自動的に作成されます。あなたは決して削除しないので、それはすでにそこにあり、そのために作成されていないと思います。

また、良い習慣として、クリーンアップ関連のコードをfinallyブロック内に配置する必要があります。このようにして、どこかでエラーが発生した場合、ファイルは最終的に閉じられます。

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
boolean success = myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
if(!success) {
     Log.w("myApp", "cannot compress image");
}
String patg = projDir + File.separator + newPath
File f = new File(projDir + File.separator + newPath);
Log.w("myApp", "cannot compress image");
try {
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if(fo != null) {
            fo.flush();
            fo.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2012-10-08T13:30:12.937 に答える
0

追加してみるfo.flush()

try {
   f.createNewFile();
   FileOutputStream fo = new FileOutputStream(f);
   fo.write(bytes.toByteArray());
   fo.flush()
   fo.close();
} catch (IOException e) {
   e.printStackTrace();
}

編集

これを試して:

File f = new File(projDir + File.separator + newPath);
FileOutputStream out = new FileOutputStream(f);
myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, out);
out.flush();
out.close();
于 2012-10-08T13:17:39.667 に答える
0

FileOutputStream で試してください:

try {
  FileOutputStream fos= new FileOutputStream(projDir + File.separator + newPath);
  myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, fos);
} catch (Exception e) {

}
于 2012-10-08T13:18:01.353 に答える