0

Androidシステムがこの例外をスローするのはなぜですか?

05-18 12:33:44.169 W/System.err( 8230): java.io.IOException: Is a directory
05-18 12:33:44.169 W/System.err( 8230):     at org.apache.harmony.luni.platform.OSFileSystem.read(Native Method)
05-18 12:33:44.169 W/System.err( 8230):     at dalvik.system.BlockGuard$WrappedFileSystem.read(BlockGuard.java:165)
05-18 12:33:44.169 W/System.err( 8230):     at java.io.FileInputStream.read(FileInputStream.java:290)
05-18 12:33:44.169 W/System.err( 8230):     at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:166)
05-18 12:33:44.169 W/System.err( 8230):     at java.io.BufferedInputStream.read(BufferedInputStream.java:324)
05-18 12:33:44.169 W/System.err( 8230):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-18 12:33:44.169 W/System.err( 8230):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:573)
05-18 12:33:44.169 W/System.err( 8230):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:384)
05-18 12:33:44.169 W/System.err( 8230):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:412)
05-18 12:33:44.169 W/System.err( 8230):     at dalvik.system.NativeStart.run(Native Method)
05-18 12:33:44.169 D/skia    ( 8230): ---- read threw an exception

私は次のように画像をメモリにロードしています:

return BitmapFactory.DecodeFile(fullPathToImage);

これは失敗の問題を引き起こしていませんが、ロードに不必要な遅延を引き起こします。

画像はに保存されますEnvironment.ExternalStorageDirectory.AbsolutePath。パスは、画像のファイル名と拡張子を含む絶対パスです。画像は正しく読み込まれるのに、なぜこれを行うのですか?

私はこれを見ました:java.io.IOException:ディレクトリAndroidですが、これは私が使用していないドローアブルリソースに関連しているようです。

4

1 に答える 1

0

ファイルシステムがディレクトリであると見なすかどうかを確認するために、DecodeFile呼び出しをチェックでラップした場合でも、エラーが発生するかどうかを確認したいと思います。

File f = new File(fullPathToImage);
if (!f.IsDirectory)
{
    return BitmapFactory.DecodeFile(fullPathToImage);
}
else
{
    Console.WriteLine("This is a directory: " + fullPathToImage);
}

もう1つのおそらく有用な考え。非常に大きな画像を扱っていて、フル解像度である必要がない場合は、サイズを小さくすることでパフォーマンスを向上させることができます。

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.InSampleSize = 4; //Cut the image size to 1/4 the original
return BitmapFactory.DecodeFile(imgFile, opts);
于 2012-05-18T14:28:01.947 に答える