我试图使用getString()
从资源中获取字符串,以便在创建活动之前将其分配给字符串数组:
private static final String[] MenuNames = {
Resources.getSystem().getString(R.string.LCMeterMenu),
Resources.getSystem().getString(R.string.FrecMenu),
Resources.getSystem().getString(R.string.LogicAnalyzerMenu),
"Prueba con achartengine",
Resources.getSystem().getString(R.string.BrazoMenu)
};
当我使用resources.getsystem().getstring(r.string.lcmetermenu)
时,Eclipse不会抱怨,但在运行时会出现错误:
由:Android.content.res.resources$NotFoundException:字符串资源ID#0x7F0A000A引起
但是,如果我在oncreate()
:
Log.i("StringR", "String: " + getString(R.string.LCMeterMenu));
我得到了字符串,但我不能将它分配给我之前定义的最后一个字符串。如果在oncreate()
之前仅使用getstring()
,则会得到和静态错误消息。如何在oncreate()
之前使用全局变量的资源?
不能从资源中初始化静态final
字段;字段需要在初始化类时初始化,并且在运行时绑定应用程序资源之前初始化。(顺便说一句,不能使用resources.getsystem()
的原因是,以这种方式获得的resources
对象只包含系统资源,而不包含任何应用程序资源。)
如果您需要在绑定应用程序资源之前使用这些字符串,那么唯一可行的做法就是将这些字符串直接放入代码中。然而,“Android方式”是组织代码,这样初始化只需要在oncreate()
期间(或之后)进行。只需在oncreate()
中初始化string数组,而不必担心将字段设置为static或final。
如果不希望字符串数组与特定活动相关联,那么可以将application
子类化,并从应用程序类的oncreate()
方法中的资源读取数组。(您还需要在清单中html" target="_blank">声明您的自定义应用程序类。)然而,文件建议反对这种方法。(由于数组是私有的,我怀疑它与单个活动密切相关,因此似乎不需要使用application
子类。)
public class StringArray {
private static String[] theArray;
public static String[] getArray(Context context) {
if (theArray == null) {
theArray = context.getResources().getStringArray(R.array.my_strings);
}
return theArray;
}
}
(假设字符串数据是在
资源中定义的,就像@jaisoni在回答中建议的那样。)同样,成员字段不能声明为final
。
问题内容: 我将SET1声明为静态String [],我想将SET2声明为SET1 +其他一些参数。是否可以声明SET2与SET1静态相似(即私有静态String []),但使用上面的定义,如果不这样做的话? 问题答案: 查看Commons Util ArrayUtils.add:
问题内容: 表: 值: 我想之前替换字符串用。 结果: 如何使用子字符串和基于字符串中的字符进行替换? 问题答案: 您甚至不需要使用或,您可以使用以下命令: 您可以使用以下方法进行测试:
注意此问题包含在Rust 1.0之前的语法。代码无效,但概念仍然相关。 如何在Rust中创建字符串的全局静态数组? 对于整数,这将编译: 但我无法获得类似的字符串编译:
问题内容: 我想要这个HTML … …像这样渲染 Q1。苹果 Q2。橘子 换句话说,我希望自动生成的数字以静态字符串“ Q”为前缀。 我试过这样的CSS: 但这产生了: 苹果 橙子 我也尝试过使用“ list-style:numberedinside;”,但这只是将列表右移,结果相同。我找不到以任何方式引用自动生成的数字元素来向其添加CSS样式信息的方法。这似乎是一个简单,常见的场景,但是我找不到
我在一段对性能要求非常高的代码中工作。我需要执行一些格式化的字符串操作,但我正在努力避免内存分配,甚至是内部库分配。 在过去,我会做类似于以下的事情(假设C11): 我更喜欢使用所有C方法(例如ostringstream)来执行此操作,而不是旧的C函数。 我意识到我可以使用std::string::reserve和std::ostringstream提前获取空间,但这仍然会执行至少一次分配。 有人
问题内容: 我在Java中使用String.format()尝试模拟C语言中可用的printf()控制通道。我了解如何指定将字符串放置在20个字符,5个,2个…的字段中, 3位小数,2位等。但是,字符串在其字段中右对齐打印。 如何将弦左对齐? 这里是一个可能的输出,我想修改左对齐的例子,并在各自的领域。 *注意:请将“-”视为空白 问题答案: 与printf相同-使用格式的修饰符