イメージファイルをアプリケーションの内部ストレージに保存しようとしています。イメージのためのアンドロイド内部ストレージの使用
これを行うには、idとビットマップをとり、imageのファイルを作成する次のメソッドを書きました。ここで、directoryはFile型のクラス静的フィールドです。
この方法は、IDとビットマップを取得し、元のファイルと作成したサムネイルを内部ストレージに保存することです。
名前は、元のファイルの[id + "。png"]とサムネイルファイルの[id + "_ tn.png"]として生成されます。
saveBitmap()mehtodは、ビットマップを内部ストレージに書き込むものです。
private static void saveBitmap(String fileName, Bitmap bitmap) {
File imageFile = new File(directory, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch(Exception e) {}
}
これは、ファイル名(11.png、11_tn.png、...)とビットマップをとる(それが元またはサムネイルのかどうか)と、ファイルを作成し、それの出力ストリームに圧縮。
奇妙なことは、初めて画像を保存するためにアプリケーションを実行すると素晴らしいことです。
内部ストレージに保存されている画像を読み書きすることができます。
ただし、アプリケーションを閉じてもう一度実行すると、次のログでFileNotFoundExceptionがスローされます。私が作ることができ
W/System.err: java.io.FileNotFoundException: /1.png: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:458)
W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:78)
W/System.err: at com.google.dotplace.dotplace.data.Image.parseCursor(Image.java:118)
W/System.err: at com.google.dotplace.dotplace.data.Image.checkDebug(Image.java:74)
W/System.err: at com.google.dotplace.dotplace.LoadActivity.debugDatabase(LoadActivity.java:77)
W/System.err: at com.google.dotplace.dotplace.LoadActivity.onCreate(LoadActivity.java:25)
W/System.err: at android.app.Activity.performCreate(Activity.java:5275)
W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2167)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2253)
W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:142)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:136)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5120)
W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:515)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
W/System.err: at dalvik.system.NativeStart.main(Native Method)
W/System.err: Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:442)
W/System.err: ... 19 more
のみ結論は、内部ストレージの変更であるか、それは私のアプリケーションを閉じた後のファイルが削除されているが、私はなぜ知らないのです。
今私が推測しているのは、テストに問題があるということです。
私はこれを次のようにテストしています。
ファイルを挿入してプロジェクトをコンパイルして実行します。
ファイルを挿入せずにプロジェクトをコンパイルして実行し、1のデータが残っているかどうかを確認します。
私はアプリケーションでファイルを書き込んだり読み込んだりしていません。
私が推測するのは、プロジェクトをもう一度コンパイルするときに、アプリケーションのコンテキスト内で何らかの形でユニークなものが変わってしまい、内部ストレージが変更されてしまい、それがかなりナンセンスだと思います。
どこが間違っていますか?あなたはマシュマロのためにと、上記runtime
許可を与える必要があり
返信いただきありがとうございますが、私は許可を必要としない内蔵ストレージを使用しています。 –