0

ページを動的に作成するために使用している文字列名と文字列ファイル名を持つデータベースがあります。前のページでは、選択したボタンに基づいてカーソルが必要な特定のエントリを返し、それを使用して対応する画像を見つけて表示します。さまざまな場所からコードをごちゃまぜにしようとしてきましたが、何も機能していないようです。現在、次のようになっています。

ImageView iv = (ImageView) findViewById(R.id.iv1);
Bitmap bmap = (Bitmap) BitmapFactory.decodeResource(this.getResources(),
getResources().getIdentifier(c.getString(4), "drawable", getPackageName()));
iv.setImageBitmap(bmap);

デバッグの目的で、カーソル getString(4) をトーストしたところ、「al_0」または本来あるべき姿として正しく表示され、「al_0.jpg」という名前の res の「drawable」フォルダーにファイルがあります。

パッケージ名と描画可能なフォルダーの場所を画像名と直接連結し、他の変数の位置に null を配置するさまざまな組み合わせを試しました。毎回、decodeResource 行への参照でクラッシュするか、「リソース番号 0x00000000 の値を取得するときにパッケージ識別子がありません。」

より詳細な情報が必要な場合は、私がそれらを提供しようとすることができます。

更新:だから、何か他のことが間違っているように見えます.以下を使用してもクラッシュします:

ImageView iv = (ImageView) findViewById(R.id.iv1);
iv.setImageResource(R.drawable.al_0);

R.drawable.al_0 は間違いなく drawable-mdpi の正しいリソースです (Lint からの提案で移動しました)。

4

2 に答える 2

0

だから、すべてが完全にうまくいったことがわかりました、私の画像はちょうど大きすぎました。使用BitmapFactory.Options.inSampleSizeして、すべてを正常に動作させることができました。役立つデバッグのヒントをありがとう、事故をお詫びします。

更新:これらのビューは動的に作成されており、いくつか開いた後にメモリエラーが発生していたため、bmap.recycle()も必要でした。どちらも問題の最適な解決策として機能しました。

于 2012-04-16T18:38:01.877 に答える
0

これが私がすることです。

ファイル名を形式com.example.appname:drawable/filenameで保存する appname と drawable の間のコロンに注意してください。

次に、データベースからその文字列を取得した後、これを使用imageStringします。カーソルからの文字列はどこにありますか。

imageResource = ClassName.this.getResources().getIdentifier(imageString, null, null);
imageView.setImageResource(imageResource);
于 2012-04-16T03:28:57.030 に答える