¿Cómo comprobar con gracia si un recurso bruto no existe?

Tengo un método en mi clase llamado juego y quiero jugar que reproduce un archivo de audio. El archivo que se reproduce depende del valor actual del audioIndex de las clases. Básicamente, hay un interruptor como este:

int rId; switch (audioIndex){ case 0: rId = R.raw.e0.wav; break; case 1: rId = R.raw.e1.wav; break; default: rId = R.raw.error.wav; break; } 

Después del switch quiero verificar si el rId es válido antes de pasarlo a MediaPlayer.create (this, rId). Parece que create no lanza una excepción si el identificador no existe o no se puede abrir. ¿Así que debo comprobarlo antes de pasarlo?

¿Cómo manejar esto con gracia? Hasta ahora he asumido que el rId siempre será correcto, pero me gustaría comprobarlo para asegurarse.

Puede obtener el identificador de recurso del nombre de archivo con este método . Devolverá 0 si no es un ID de recurso válido. Vea esta pregunta para más información.

El proyecto no debe compilar si el recurso no existe, ya que R.resourcetype.resourcename no existirá en R.java. Esto sólo es útil si no sabe qué recursos tendrá en tiempo de ejecución.

Te sugiero que utilices mi método para obtener un ID de recurso. Si hace un manejo de excepciones simple allí, verá que si su recurso no existe, será lanzado. Que resolvería su problema con gracia.

Aquí está el código:

 /** * @author Lonkly * @param variableName - name of drawable, eg R.drawable.<b>image</b> * @param с - class of resource, eg R.drawable, of R.raw * @return integer id of resource */ public static int getResId(String variableName, Class<?> с) { Field field = null; int resId = 0; try { field = с.getField(variableName); try { resId = field.getInt(null); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } return resId; } 
  • ¿Cómo puedo hacer que URLEncoding no codifique los dos puntos?
  • Agregar dinámicamente a horizontalscrollview
  • Android: fija el elemento fijo en RecyclerView
  • No se puede ejecutar dex: varios archivos dex definen Lbolts / AggregateException
  • Intención de youtube app profile / channel
  • Cómo probar la actualización de la base de datos sqlite antes de cargar la nueva versión de mi aplicación en la tienda de juegos en android
  • Balloon in Chatting Aplicación para Android
  • Parse: ¿Cómo configurar un puntero en Android?
  • ¿Cómo comprobar la intersección en libgdx?
  • Definir peculiaridad para WebView
  • Compartir código entre fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.