5

データベースから各ロゴのリソース名を読み取り、ドローアブルを設定しようとするアプリケーションを開発しています。

ただし、NumberFormatExceptionロゴの整数識別子を取得しようとすると、Logcatにが表示され、アプリケーションの先頭でアプリケーションが突然強制終了します。

私のコードは次のとおりです。

String logo;
logo = c.getString(2);
button.setBackgroundResource(Integer.parseInt(logo));

logoたとえば、次のようにデータベースに保存されます。R.drawable.logo

ここで何がうまくいかないのか提案がありますか?

4

2 に答える 2

2

の値logo"R.drawable.logo"(a String) の場合、それは に解析できませんint。R.drawable.logo は実際には、生成されたリソース クラス のサブクラスであるstatic int logo内の変数への参照です。生成されたリソース クラスで、プロジェクトのフォルダーの下にあります。static class drawableRRgen

自分で解析する必要があります。返されるドローアブルであることがわかっている場合は、次のようにする必要があります。

String logoParts [] = logo.split ("\\.");
int logoId = getResources ().getIdentifier (logoParts [logoParts.length - 1], "drawable", "com.example.app");

または、関数に分割することもできます。

public static int parseResourceString (Stinrg resString, String package) {
    String resParts [] = resString.split ("\\.");
    return getResources ().getIdentifier (resParts [resParts.length - 1], resParts [resParts.length - 2], package);
}
于 2013-03-13T11:36:17.823 に答える
0

これを試して

String logo=c.getString(2);

R.drawable は必要ないので、分割して削除します。

logo=logo.split("\\.")[2];

3 番目のパラメーターはパッケージ名です

int drawableId = getResources().getIdentifier(logo, "drawable", "com.mypackage.myapp");

button.setBackgroundResource(drawableId);
于 2013-03-13T11:34:00.340 に答える