Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse/Java-R.string.*中的值返回int?_Java_Android_String_Resources - Fatal编程技术网

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

Eclipse/Java-R.string.*中的值返回int?,java,android,string,resources,Java,Android,String,Resources,我想我应该很优雅,使用string.xml文件为异常消息之类的东西定义一些常量字符串。在strings.xml中,我点击Add,选择“String”选项(不是“stringarray”),然后给它一个名称和值。我惊讶地发现这段代码不起作用: throw new Exception(R.string.MyExceptionMessage); 这失败了,因为R.string.MyExceptionMessage实际上是int类型的。我缺少什么?类R中的所有内容都是引用,因此它只是定义为int 如果

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

throw new Exception(R.string.MyExceptionMessage);

这失败了,因为R.string.MyExceptionMessage实际上是int类型的。我缺少什么?

R
中的所有内容都是引用,因此它只是定义为
int

如果您的代码在Android
Context
中运行或具有访问权限,则可以调用
Context.getString(R.string.my_exception_message)
以获取实际的
字符串值


或者,对于不需要翻译的异常字符串,因此不需要在Android resource.xml文件中严格定义,您可以将这些字符串作为常量存储在某种
StringConstants
接口中。这样,您就可以从实用程序类中引用可能无法访问
上下文的字符串。但如果您也想本地化异常字符串,该怎么办呢。例如,您抛出一个异常,当您捕获它时,您希望向用户显示异常消息。我想将它们放在strings.xml中,但同时我不想使用此代码

throw new Exception(context.getString(R.string.my_exception_message))
因为我认为如果你有一个异常,你可能不想要,你不能使用一些额外的代码来获取异常消息

我认为唯一的解决方案是在主活动中为此消息声明一个静态字符串,并尽快初始化它(例如在onCreate()方法中),如下所示:

private static String my_exception_message;

public onCreate()
{
    my_exception_message = context.getString(R.string.my_exception_message);
}
因此,当您抛出异常时,您的本地化消息已准备好使用它。 你怎么想?您可以考虑其他一些解决方案?

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


砰,你有你的绳子。确保将该字符串存储在values文件夹中的string.xml文件中。

Chris在这两个帐户上都是正确的。getString加载字符串资源。但是要小心把不可本地化的东西放在那里,因为它会与翻译时的字符串混淆。我不认为它是一流的,但必须把你的UI字符串放在XML文件中,而不是在代码中。在某一时刻,你会想将你的应用程序分发到其他国家,而要将它们从代码中删除需要付出大量的努力。现在就做,省得头痛。我在中国有一个经销商,我只是把strings.xml发送给她翻译,不费吹灰之力。关于,ArigetResources()方法并不总是可用的。
  getResources().getString(R.string.title_activity)