Как проверить, существует ли ресурс в Android

Есть ли встроенный способ проверить, существует ли ресурс или я оставляю что-то вроде следующего:

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

Solutions Collecting From Web of "Как проверить, существует ли ресурс в Android"

В соответствии с javadoc вам не нужна попытка catch: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String, % 20java.lang.String% 29

Если getIdentifier() возвращает ноль, это означает, что такой ресурс не существует.
Также 0 – это незаконный идентификатор ресурса.

Таким образом, ваша логическая переменная result эквивалентна (test != 0) .

Во всяком случае, ваша попытка / наконец-то плохая, потому что все, что она делает, задает переменную результата false, даже если исключение mContext.get..... из тела try: mContext.get..... а затем он просто «пересказывает» исключение после выхода Окончательной оговорки. И я полагаю, что это не то, что вы хотите сделать в случае исключения.

Блок try / catch в вашем коде абсолютно бесполезен (и ошибочен), поскольку ни getResouces() ни getIdentifier(...) выбрасывают исключение.

Итак, getIdentifier(...) уже вернет вам все, что вам нужно. Действительно, если он вернет 0, то ресурс, который вы ищете, не существует. В противном случае он вернет связанный идентификатор ресурса ( «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; } 

Если кто-то задается вопросом, "my_resource_name" в

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

на самом деле

 String resourceName = String.valueOf(R.drawable.my_resource_name); int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName());