Подтвердить что ты не робот

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

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

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

Ответ 1

В соответствии с 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, даже если исключение выбрано из тела try: mContext.get....., а затем он просто "пересказывает" исключение после выхода из окончательного пункт. И я полагаю, что это не то, что вы хотите сделать в случае исключения.

Ответ 2

Блок 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;
}

Ответ 3

Если кто-то задается вопросом, "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());