java - strings - string-array android studio
¿Cómo verifico si existe un recurso en Android? (4)
De acuerdo con el javadoc, no necesitas el try catch: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29
Si getIdentifier()
devuelve cero, significa que no existe tal recurso.
También 0 - es un ID de recurso ilegal.
Entonces su variable booleana de resultado es equivalente a (test != 0)
.
De todos modos, su intento / finalmente es malo, porque todo lo que hace es establecer la variable de resultado en falso, incluso si se lanza una excepción desde el cuerpo de intento: mContext.get.....
y luego simplemente "vuelve a salir" la excepción después de salir de finalmente la cláusula. Y supongo que no es lo que quieres hacer en caso de excepción.
¿Existe una forma integrada de verificar si existe un recurso o me quedo haciendo algo como lo siguiente:
boolean result;
int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName());
result = test != 0;
El bloque try / catch en su código es totalmente inútil (y incorrecto), ya que ni getResouces()
ni http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29 lanzan una Excepción.
Entonces, http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29 ya te devolverá todo lo que necesitas. De hecho, si devolverá 0, entonces el recurso que está buscando no existe. De lo contrario, devolverá el identificador de recurso asociado ( http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29 ).
Aquí el código correcto:
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;
}
En caso de que alguien se esté preguntando, el "my_resource_name"
en
int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName());
es en realidad
String resourceName = String.valueOf(R.drawable.my_resource_name);
int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName());
me gusta hacer algo asi
public static boolean isResource(Context context, int resId){
if (context != null){
try {
return context.getResources().getResourceName(resId) != null;
} catch (Resources.NotFoundException ignore) {
}
}
return false;
}
así que ahora no es solo para dibujar