从Java文件获取Android项目的字符串资源

3
我正在为我的Android项目在R.strings资源中定义许多常量字符串。但是我想仅在Java文件中使用它们,其中类只是一个Java类。有没有办法获取该引用?
我能够引用它,但由于这是一个Java文件,我无法使用Context.getString()方法。
我的选择是什么?我应该只在此Java文件中定义所有常量字符串吗?还是我仍然可以使用R.strings?
示例:
getString(R.string.PLUS_SERVICE)
这不起作用,因为我没有上下文。
谢谢!
6个回答

5

尝试

Context context=getApplicationContext();
context.getString(R.string.PLUS_SERVICE);

3
你试过吗?因为我怀疑,getApplicationContext()方法属于Context类,在Java文件中没有上下文可用,那么它的方法如何可用? - MKJParekh
1
这不会起作用,因为它仅在Java文件中不可用。 - prolink007

4
取决于这些字符串是什么。字符串常量与字符串资源略有不同。通常,如果这些字符串最终出现在面向用户的文本中,则应将它们放入字符串资源中,以便轻松进行本地化。如果它们用于异常消息等,则这并不重要,可以将它们放入常量中。 如果您需要在没有上下文的类中使用资源,则需要为其提供访问权限。您可以将其作为参数传递给使用它的方法,或者在创建类时将其传递到构造函数并将其存储为成员变量。

谢谢,我喜欢你对何时使用字符串常量和何时使用资源的解释。 - prolink007

2

您可以做一件事情,

在Java文件中将Constructor修改为接受Context作为参数,例如:

public ClassName(Context c)
{
}

在创建对象时,从活动中传递上下文。

new ClassName(ActivityName.this);

现在你可以在Java文件中使用该上下文变量。


+1,谢谢。这应该有效,我会尽快尝试。 - prolink007

0

试试这个,例如在片段中使用

getActivity().getApplicationContext().getString( R.string.resource )

0

请确保:

Context context=this;

实际上是Activity上下文,然后可以访问字符串资源:

String string = context.getApplicationContext().getString(R.string.string_name)

0

正如其他人所说,这些资源是用于UI的。如果需要这些字符串的类没有访问上下文的权限,则它们可能只需要成为该类中的常量。如果您需要将上下文强制转换为类,则可能需要重新评估设计,因为这样做会使其成为一个功能库而不是面向对象的设计。资源的访问和使用应该自然地融入良好的OOD中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接