我的课程中有一个名为play的方法,我想要播放播放音频文件的方法。播放哪个文件取决于当前audioIndex值的类。基本上,有一个这样的开关:
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;
}
在切换之后,我想验证rId是否有效,然后再将其传递给MediaPlayer.create(this,rId)。如果id不存在或无法打开,则看起来create不会抛出异常。所以我必须在通过之前检查一下吗?
如何优雅地处理这个?直到现在我才假设rId总是正确但我想检查以确保。
答案 0 :(得分:3)
您可以使用this method从文件名中获取资源标识符。如果它不是有效的资源ID,它将返回0。有关详情,请参阅this question。
如果资源不存在,项目不应该编译,因为R.java中不存在R.resourcetype.resourcename。这仅在您不知道运行时将拥有哪些资源时才有用。
答案 1 :(得分:0)
我建议您使用我的方法获取资源ID。如果你在那里进行简单的异常处理,你会看到,如果你的资源不存在,它将被抛出。这样可以优雅地解决您的问题。
以下是代码:
/**
* @author Lonkly
* @param variableName - name of drawable, e.g R.drawable.<b>image</b>
* @param с - class of resource, e.g 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;
}