Eclipse/Java - значения в R.string. * Return int?
Я думал, что буду классным и использую файл string.xml, чтобы определить некоторые константные строки для таких вещей, как сообщения об исключениях. В strings.xml я нажимаю "Добавить", выбирает параметр "String" (не "String Array" ), а затем дал ему имя и значение. Я был удивлен, увидев, что этот код не работает:
throw new Exception(R.string.MyExceptionMessage);
И это не получается, потому что R.string.MyExceptionMessage имеет тип int. Я могу проверить этот тип, посмотрев в R.java. Что мне не хватает?
Ответы
Ответ 1
Все в классе R
является ссылкой, поэтому оно просто определяется как int
.
Если ваш код работает в — или имеет доступ к — Android Context
, вы можете вызвать context.getString(R.string.my_exception_message)
, чтобы получить фактическое значение String
.
Или для таких вещей, как строки исключений, которые не требуют перевода и поэтому не обязательно должны быть определены в файле XML файла Android, вы можете хранить строки как константы в некотором StringConstants
интерфейс. Таким образом, вы можете ссылаться на строки из классов утилит, которые могут не иметь доступа к Context
.
Ответ 2
Используйте метод getResources(). getString (id).
getResources().getString(R.string.title_activity)
И бум, у вас есть ваша строка. Обязательно сохраните эту строку в файле string.xml в папке значений.
Ответ 3
Крис прав. Но что делать, если вы хотите также локализовать строку Exception. Например, вы бросаете исключение, и когда вы его поймаете, вы хотите показать сообщение об исключении пользователю. Я хотел бы поместить их в strings.xml, но в то же время я не хочу использовать этот код
throw new Exception(context.getString(R.string.my_exception_message))
потому что я думаю, что если у вас есть исключение, вероятно, вы не хотите, и вы не можете использовать дополнительный код для получения сообщения об исключении.
Я думаю, единственным решением было бы объявить статическую String для этого сообщения в вашем основном Управлении и как можно скорее инициализировать его (например, в методе onCreate()):
private static String my_exception_message;
public onCreate()
{
my_exception_message = context.getString(R.string.my_exception_message);
}
Поэтому, когда вы генерируете исключение, у вас есть локализованное сообщение, готовое его использовать.
Что ты думаешь? Вы можете подумать о некоторых других решениях?