¿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()); 
  • Cuándo utilizar / no utilizar un adaptador de sincronización
  • Serialización de Java - deserialización de Android
  • Cómo obtener datos de tráfico de conexión
  • Acceder a la barra de acción desde dentro de un fragmento
  • Android: Descarga de un archivo protegido por autenticación NTLM
  • ¿Es posible instalar el JDK en un dispositivo android?
  • Archivo de Java subiendo dolorosamente lento
  • Cómo agregar una imagen con texto en las opciones del menú en Android?
  • Android MQTT Client no puede volver a conectarse a ActiveMQ
  • Determinar el ancho de una cadena en una fuente determinada
  • Obteniendo java.io.IOException: se ha producido un error en la lectura, el socket puede estar cerrado o el tiempo de espera en BluetoothSocket.connect ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.