Eclipse / Java - R.string中的值。* return int?

时间:2009-12-31 01:42:47

标签: java android string resources

我认为我会很优雅,并使用string.xml文件为异常消息之类的内容定义一些常量字符串。在strings.xml中,我点击Add,选择“String”选项(不是'String Array'),然后给它一个名称和值。我很惊讶地发现这段代码不起作用:

throw new Exception(R.string.MyExceptionMessage);

之所以失败是因为R.string.MyExceptionMessage实际上是int类型。我可以通过查看R.java来验证该类型。我错过了什么?

3 个答案:

答案 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)

克里斯是对的。但是如果你想要本地化Exception字符串该怎么办呢。例如,您抛出一个Exception,当您捕获它时,您希望向用户显示异常消息。我想把它们放在strings.xml中,但同时我不想使用这个代码

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);
}

因此,当您抛出异常时,您已准备好使用本地化消息。 你认为呢?您可以考虑其他一些解决方案吗?