studio strings recursos getresources getidentifier español array java android

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