Eclipse / Java – R.string中的值*返回int?

我认为我会很优雅,并使用string.xml文件来定义一些常量string,如exception消息。 在strings.xml中,我点击Add,select“String”选项(不是'String Array'),然后给它一个名字和值。 我很惊讶地看到这个代码不起作用:

throw new Exception(R.string.MyExceptionMessage); 

而这个失败是因为R.string.MyExceptionMessage实际上是inttypes的。 我可以通过查看R.java来validation该types。 我错过了什么?

R类中的所有东西都是一个引用,因此它只是定义为int

如果你的代码运行在或者可以访问Android Context ,你可以调用context.getString(R.string.my_exception_message)来得到实际的String值。

或者,像exceptionstring这样的东西不需要被翻译,所以也不需要在Android资源.xml文件中定义,你可以把string作为常量存储在某种types的StringConstants接口中。 这样,您可以从实用程序类中引用可能无法访问Context的string。

使用“getResources()。getString(id)”方法。

  getResources().getString(R.string.title_activity) 

而繁荣,你有你的弦乐。 确保将该string存储在values文件夹中的string.xml文件中。

克里斯是对的。 但是如果你想本地化Exceptionstring呢。 例如,你抛出一个exception,当你捕捉它,你想显示exception消息给用户。 我想把它们放在strings.xml中,但同时我不想使用这个代码

 throw new Exception(context.getString(R.string.my_exception_message)) 

因为我认为如果你有一个exception可能你不想要,你不能使用一些额外的代码来获取exception消息。

我认为唯一的解决scheme是在主Activity中为这个消息声明一个静态string,并尽快初始化它(例如在onCreate()方法中),如下所示:

 private static String my_exception_message; public onCreate() { my_exception_message = context.getString(R.string.my_exception_message); } 

所以,当你抛出exception,你有本地化的消息准备使用它。 你怎么看? 你可以想一些其他的解决scheme?