我认为我会很优雅,并使用string.xml文件为异常消息之类的内容定义一些常量字符串。在strings.xml中,我点击Add,选择“String”选项(不是'String Array'),然后给它一个名称和值。我很惊讶地发现这段代码不起作用:
throw new Exception(R.string.MyExceptionMessage);
之所以失败是因为R.string.MyExceptionMessage实际上是int类型。我可以通过查看R.java来验证该类型。我错过了什么?
答案 0 :(得分:113)
R
类中的所有内容都是引用,因此它只是定义为int
。
如果您的代码在Android Context
内运行或有权访问,则可以致电context.getString(R.string.my_exception_message)
获取实际的String
值。
或者,对于不需要翻译的异常字符串,因此不需要在Android资源.xml文件中严格定义,您可以将字符串存储为某种{{1}的常量接口。这样,您可以引用可能无法访问StringConstants
的实用程序类中的字符串。
答案 1 :(得分:32)
使用“getResources()。getString(id)”方法。
getResources().getString(R.string.title_activity)
繁荣,你有你的绳子。请务必将该字符串存储在values文件夹的string.xml文件中。
答案 2 :(得分:5)
throw new Exception(context.getString(R.string.my_exception_message))
因为我认为如果你有一个Exception可能你不想要,你不能使用一些额外的代码来获取异常消息。
我认为唯一的解决方案是在主Activity中为此消息声明一个静态String并尽快初始化它(例如在onCreate()方法中),如下所示:
private static String my_exception_message;
public onCreate()
{
my_exception_message = context.getString(R.string.my_exception_message);
}
因此,当您抛出异常时,您已准备好使用本地化消息。 你认为呢?您可以考虑其他一些解决方案吗?