2010-12-27 5 views
41

に存在するかどうかをチェックしますが、リソースが存在するか、私は以下のような何かをやって残っていますかどうかを確認する方法で構築あり:どのように私は、リソースは、Android

boolean result; 
int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 
result = test != 0; 
+0

ですこれを行う。この方法であなたを悩ませているのは何ですか? –

+0

おそらくそうではありませんが、どこにでもtry/finallyを貼り付けるのではなく、私のためのエラー処理を行う組み込み関数が好きです。 – user432209

+0

ここでエラー処理は必要ありません。以下の私のコメントを読んでください。 –

答えて

46

のjavadocによると、試しにキャッチする必要はありません。 http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29

getIdentifier()がゼロを返す場合は、そのようなリソースが存在しないことを意味します。
また、0 - 不正なリソースIDです。

したがって、結果ブール変数は(test != 0)に相当します。

とにかくtry/finallyは悪いです。なぜなら、tryの本体から例外がスローされても結果変数をfalseに設定するからです。mContext.get.....そして最後にfinally句から抜け出した後に例外を "再スロー"します。そして、例外の場合にあなたがしたいことではないと思います。

+3

例を挙げてください。 –

+0

"my_resource.png"と "my_resource.xml"がある場合はどうなりますか?どのように私はそれらのお互いの違いができますか? –

22

getResouces()getIdentifier(...)も例外をスローしないので、コード内のtry/catchブロックはまったく役に立たない(そして間違っています)。

したがって、getIdentifier(...)は既に必要なものすべてを返します。実際に、0を返すと、探しているリソースは存在しません。それ以外の場合は、関連するリソース識別子(実際には)が返されます。

ここで正しいコード:誰かが疑問に思っている場合には

int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 

if (checkExistence != 0) { // the resouce exists... 
    result = true; 
} 
else { // checkExistence == 0 // the resouce does NOT exist!! 
    result = false; 
} 
3

int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 

"my_resource_name"はそれが非常に苦労していないようだ、実際に

String resourceName = String.valueOf(R.drawable.my_resource_name); 
int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName()); 
関連する問題