gpt4 book ai didi

android - 如何在 onCreate() 之前在静态字符串上使用 getString()?

转载 作者:IT王子 更新时间:2023-10-28 23:35:53 24 4
gpt4 key购买 nike

我正在尝试使用 getString() 从资源中获取字符串,以便在创建 Activity 之前将其分配给字符串数组:

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 不会提示,但我在运行时收到错误:

Caused by: android.content.res.Resources$NotFoundException: String Resource ID #0x7f0a000a

但是如果我把 onCreate() 放在里面:

Log.i("StringR", "String: " + getString(R.string.LCMeterMenu));

我得到了字符串,但我无法将它分配给我之前定义的最终字符串。如果我在 onCreate() 之前只使用 getString() 我会得到静态错误消息。如何在 onCreate() 之前将资源用于全局变量?

最佳答案

您不能初始化 static final资源领域;该字段需要在初始化类时初始化,并且在运行时绑定(bind)应用程序资源之前发生。 (顺便说一句,你不能使用 Resources.getSystem() 的原因是你通过这种方式获得的 Resources 对象只包含系统资源,不包含任何应用程序资源。)

如果您在绑定(bind)应用程序资源之前需要这些字符串可用,唯一可行的做法是将这些字符串直接放入代码中。但是,“Android 方式”是组织您的代码,因此初始化只需要在 onCreate() 期间(或之后)进行。 .只需初始化 onCreate() 中的字符串数组并且不用担心将字段设为静态或最终字段。

如果您不希望字符串数组与特定 Activity 相关联,那么您可以继承 Application并从应用程序类的 onCreate() 内的资源中读取数组方法。 (您还需要在 list 中声明您的自定义应用程序类。)但是,the docs建议反对这种做法。 (由于数组是私有(private)的,我怀疑它无论如何都与单个 Activity 密切相关,因此使用 Application 子类似乎没有必要。)

另一种方法是为您的数组声明一个单例类。那么单例访问器函数需要一个 Context因此它可以在必要时检索资源:

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

(假设字符串数据是在 <string-array> 资源中定义的,就像@JaiSoni 在他的回答中建议的那样。)再一次,不能声明成员字段 final .

关于android - 如何在 onCreate() 之前在静态字符串上使用 getString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com