Resources.getIdentifier () имеет неожиданное поведение, когда имя числовое - PullRequest
1 голос
/ 17 июня 2011

Я использую Resources.getIdentifier для динамической загрузки строковых ресурсов;потому что мне динамически передается строка, которую нужно перевести из моих файлов ресурсов.Возвращает 0, когда ресурс не существует;так что я справлюсь с этим.Однако, когда я передаю строку, которая является числовой;хотя это не определено в моих ресурсах, оно возвращает число, которое я передал вместо 0. Это вызывает сбой при попытке получить этот ресурс.

int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
    text2.setVisibility(View.VISIBLE);
    text2.setText(context.getResources().getString(identifier));
} else {
    text2.setVisibility(View.GONE);
}

Это определенное поведение??Я не могу себе представить, почему он работает нормально, когда myText равен «BLAH», но тогда, когда myText равен «12», он отличается.Единственное, о чем я могу подумать, это сначала проверить, является ли myText числовым;хотя единственный способ найти это - попытаться разобрать его как целое число и перехватить исключение numberFormatException.Это лучшее решение?

Ответы [ 3 ]

7 голосов
/ 17 июня 2011

Что ж, это немного странно, но если я укажу полное имя, как оно указано в документации getIdentifier (), оно будет работать правильно, иначе я получу тот же результат, что и вы.

Попробуйте с getIdentifier("com.farragut.android.emsspeak:string/"+myText, null, null);

0 голосов
/ 15 октября 2011

Я бился головой, чтобы сделать эту работу:

int imgId = getResources().getIdentifier("moviedetails" + movieId , "drawable", getPackageName());
imageview.setImageResource(imgId);

прекрасно работает для меня. просто нужно: "Проект -> Чистота"

0 голосов
/ 17 июня 2011

Строковый ресурс может содержать только строки без специальных символов и алфавитов в качестве имени тега.

пример

<string name="mydata">Suuuuu</string> действительно

<string name="45645">Suuuuu</string> недействительно

поэтому сначала проверьте, верен ли ваш текст или нет

Используйте следующий код, чтобы он заработал для вас

код

boolean isValid = (Pattern.matches("[a-zA-Z]+", myText))

if(isValid){
int identifier = context.getResources().getIdentifier(myText, "string", "com.farragut.android.emsspeak");
if (identifier > 0) {
    text2.setVisibility(View.VISIBLE);
    text2.setText(context.getResources().getString(identifier));
} else {
    text2.setVisibility(View.GONE);
}

}

Спасибо Дипак

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