2013-03-13 11 views
5

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

ロゴの整数識別子を取得しようとすると、NumberFormatExceptionが私のLogcatに入ります。アプリケーションが突然強制終了します。次のように

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

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

logoは、例えばとしてデータベースに保存されます。R.drawable.logo

あなたはここでうまくいかない何の提案を持っていますか?

答えて

2

あなたのパッケージ名です。 R.drawable.logoは実際にはstatic class drawableの変数static int logoへの参照です。これは生成されたリソースクラスRのサブクラスです。 Rは生成されたリソースクラスで、genフォルダーの下にあるプロジェクトで見つけることができます。

自分で解析する必要があります。私は問題を取得し、

public static int parseResourceString (Stinrg resString, String package) { 
    String resParts [] = resString.split ("\\."); 
    return getResources().getIdentifier (resParts [resParts.length - 1], resParts [resParts.length - 2], package); 
} 
+0

ありがとう、それは私のために働いた! –

0

この

String logo=c.getString(2); 

があなたの描画可能な名前なので、分割することによって、それらを取り除くR.drawableの必要はありませんを取得してください。 logoの値が"R.drawable.logo"ある場合

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

3番目のパラメータは、その後intに解析することができないこと、(String

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

button.setBackgroundResource(drawableId); 
+0

おかげ:あなたは機能に分離することができ、また

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

:あなたはそれが返される描画可能だということを知っている場合は、あなたのような何かをしなければなりませんline logo = logo.split(。)[2] ;.あなたはそれについて説明できますか? –

+0

あなたの助けをありがとう..... –

+0

分割の問題は、ドットを文字列として提供する必要があるためです。また、これは正規表現であるため、特殊文字としてエスケープする必要があります。しかし、バックスラッシュはJavaエスケープ文字でもあるため、エスケープする必要があります。そのはず "\\。"。 – Shade

関連する問題