在Android Studio中,我有一个integer.xml文件,我在其中定义了两个整数。最小和最大如果我将min设置为8,我如何获得此值并在Java中将其设置为静态?
类似的东西:
private static final int MIN = getInteger(R.integer.min);
我知道这与使用R.id.string获取字符串非常不同。
无论我尝试什么,我都会遇到有关静态和非静态方法的错误。
答案 0 :(得分:2)
您不能以这种方式初始化final static
变量。最终的静态变量必须在声明的地方或static {}
块中初始化,即在创建任何类的实例之前。
但是,资源不是静态的。因此,您无法使用this.getResources().getInteger()
对其进行初始化:getResources()
方法需要一个当时未初始化的Context。
一种解决方案是直接初始化变量:
static final int MIN = 8;
或者,您可以将其设为非static
并在onCreate()
初始化。
答案 1 :(得分:1)
要访问getInteger方法,首先需要resource的实例。您通常可以通过Context类的getResources方法(Activity,Service等)来实现。因此,要在静态声明中访问上下文实例,您需要获取对上下文的静态引用,这通常是一个坏主意,导致内存泄漏。我建议在不使用资源的情况下声明这些常量,仅在代码中。如果您有某些特定原因要将这些常量保留在资源中,请保留对application的引用并按预期使用它。