Как изящно проверить, не существует ли необработанный ресурс? - PullRequest
6 голосов
/ 28 июля 2011

В моем классе есть метод play, и я хочу 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;
}

После переключения я хочу проверить, действителен ли идентификатор, прежде чем передать его в MediaPlayer.create (this, rId).Похоже, что create не создает исключение, если идентификатор не существует или не может быть открыт.Так что я должен проверить, прежде чем передать его?

Как изящно справиться с этим?До сих пор я только предполагал, что значение всегда будет правильным, но я хотел бы проверить, чтобы убедиться.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Вы можете получить идентификатор ресурса из имени файла с помощью этого метода .Он вернет 0, если это не правильный идентификатор ресурса.См. этот вопрос для получения дополнительной информации.

Проект не должен компилироваться, если ресурс не существует, поскольку R.resourcetype.resourcename не существует в R.java.Это полезно только в том случае, если вы не знаете, какие ресурсы будут у вас во время выполнения.

0 голосов
/ 29 августа 2011

Я бы предложил вам использовать мой метод для получения идентификатора ресурса. Если вы выполните простую обработку исключений, вы увидите, что если ваш ресурс не существует, он будет сгенерирован. Это изящно решит вашу проблему.

Вот код:

/**
     * @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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...