¿Cómo puedo comprobar si existe un recurso en Android?

¿Hay una forma construida de comprobar para ver si existe un recurso o me he dejado haciendo algo como lo siguiente:

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

De acuerdo con el javadoc usted no necesita 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 identificador de recurso ilegal.

Así que su variable booleana de resultado es equivalente a (test != 0) .

De todos modos su try / finalmente es malo, porque todo lo que hace que el resultado de la variable a false, incluso si la excepción se lanza desde el cuerpo de intentar: mContext.get..... y luego sólo "retitula" la excepción después de salir De la cláusula final. Y supongo que no es lo que quieres hacer en caso de excepción.

El bloque try / catch en tu código es totalmente inútil (y equivocado), ya que ni getResouces() ni getIdentifier(...) lanzan una excepción.

Por lo tanto, getIdentifier(...) ya le devolverá todo lo que necesita. De hecho, si devuelve 0, entonces el recurso que está buscando no existe. De lo contrario, devolverá el identificador de recurso asociado ( "0 no es un ID de recurso válido" , de hecho).

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()); 
  • Offset LatLng por una cierta cantidad de metros en Android
  • Los datos permanecen en el almacén de datos local después de desenfilar
  • Cómo deslizar una vista dentro y fuera de android
  • ¿Cómo ejecutar una función cada dos segundos en Java en Android?
  • NullPointerException al intentar pasar matriz de cadena de una clase a otra
  • Cómo transferir una lista ArrayList
  • Hacer un mensaje Toast de un hilo independiente
  • org.json.JSONObject no se puede convertir en JSONArray
  • Eclipse "funciona como android" no hace nada
  • Cómo convertir de un ArrayList de matrices a una matriz de matrices
  • Biblioteca de Microsoft Office de Microsoft (.doc, .docx, .xls, .ppt, etc.)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.