web-dev-qa-db-ja.com

androidのアセットフォルダーからファイルを開く

このassets/Files/Android.gifのようなassetsフォルダ内に.gifファイルがあります。ファイルを開こうとすると、2行目に例外がスローされます

AssetManager mngr=getAssets();
InputStream is2=mngr.open("Files/Android.gif");

テキストファイルを開こうとすると同じコードが機能するにもかかわらず、画像ファイルを開こうとしているのですか?ここで何が問題になる可能性があります。

16
Mina Samy

これらのラインは完全に機能しています-

InputStream assetInStream=null;

try {
    assetInStream=getAssets().open("icon.png");
    Bitmap bit=BitmapFactory.decodeStream(assetInStream);
    img.setImageBitmap(bit);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if(assetInStream!=null)
    assetInStream.close();
}

画像が非常に大きい場合は、ビットマップにデコードする前に画像をスケーリングする必要があります。 大きな画像を効率的に表示する方法を参照

31
Tofeeq Ahmad

未処理の例外タイプIOExceptionについて不満が出ていると思います。その場合は、mgr.openへの呼び出しをtry-catchブロックに入れて、InputStreamオブジェクトの取得時に発生する可能性のある例外を処理する必要があります。

AssetManager mngr = getAssets();
try {
    InputStream is2 = mngr.open("Files/Android.gif");
} catch (final IOException e) {
    e.printStackTrace();
}
4
keno

これを行うための好ましい方法は、イメージをres/drawableディレクトリに置くことです。次に、次のようなDrawableを取得できます。

Drawable d = Resources.getSystem().getDrawable(R.drawable.Android);
1
AdamC

物事が変わったかどうかはわかりませんが、Android 1.1にアプリを置いてアイコンを開いてビューに表示するアプリを用意しました。

BufferedInputStream buf = new BufferedInputStream(mContext.openFileInput(value));
Bitmap bitmap = BitmapFactory.decodeStream(buf);
1
JRL

Androidではgifが自動的にサポートされるとは思いません。同じコードでpngまたはjpgを試してください。

0
Adam Freeman

ミナ、同じ問題がありました... "アセット"内に画像とXMLファイルがあり、XMLファイルは読み取ることができましたが、画像は読み取れませんでした。数時間の欲求不満の後、私はようやく解決策を見つけました!

私はここに解決策を投稿しました: アセットフォルダーから画像を表示するnullポインターの問題Android 2.2 SDK

0