Jam*_*add 63 java string resources android
我以为我会很优雅并使用string.xml文件为异常消息之类的东西定义一些常量字符串.在strings.xml中,我点击Add,选择"String"选项(不是'String Array'),然后给它一个名称和值.我很惊讶地发现这段代码不起作用:
throw new Exception(R.string.MyExceptionMessage);
Run Code Online (Sandbox Code Playgroud)
这失败了,因为R.string.MyExceptionMessage实际上是int类型.我可以通过查看R.java来验证该类型.我错过了什么?
Chr*_*Orr 115
R类中的所有内容都是引用,因此它只是定义为int.
如果您的代码在Android中运行 - 或者可以访问 - Context,您可以调用context.getString(R.string.my_exception_message)以获取实际String值.
或者,对于不需要翻译的异常字符串这样的事情,因此不需要在Android资源.xml文件中严格定义,您可以将字符串存储为某种StringConstants界面中的常量.这样,您可以引用可能无法访问的实用程序类中的字符串Context.
ski*_*don 32
使用"getResources().getString(id)"方法.
getResources().getString(R.string.title_activity)
Run Code Online (Sandbox Code Playgroud)
和繁荣,你有你的字符串.请确保将该字符串存储在values文件夹的string.xml文件中.
克里斯是对的.但是如果你想要本地化Exception字符串该怎么办呢.例如,您抛出一个Exception,当您捕获它时,您希望向用户显示异常消息.我想把它们放在strings.xml中,但同时我不想使用这段代码
throw new Exception(context.getString(R.string.my_exception_message))
Run Code Online (Sandbox Code Playgroud)
因为我认为如果你有一个Exception可能你不想要,你不能使用一些额外的代码来获取异常消息.
我认为唯一的解决方案是在主Activity中为此消息声明一个静态String并尽快初始化它(例如在onCreate()方法中),如下所示:
private static String my_exception_message;
public onCreate()
{
my_exception_message = context.getString(R.string.my_exception_message);
}
Run Code Online (Sandbox Code Playgroud)
因此,当您抛出异常时,您已准备好使用本地化消息.你认为呢?你能想到其他一些解决方案吗?