Подтвердить что ты не робот

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. Что мне не хватает?

4b9b3361

Ответ 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);
}

Поэтому, когда вы генерируете исключение, у вас есть локализованное сообщение, готовое его использовать. Что ты думаешь? Вы можете подумать о некоторых других решениях?