Есть ли встроенный способ проверить, существует ли ресурс или я оставляю что-то вроде следующего:
boolean result;
int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName());
result = test != 0;
Есть ли встроенный способ проверить, существует ли ресурс или я оставляю что-то вроде следующего:
boolean result;
int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName());
result = test != 0;
В соответствии с 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.....
, а затем он просто "пересказывает" исключение после выхода из окончательного пункт. И я полагаю, что это не то, что вы хотите сделать в случае исключения.
Блок 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());