从我的应用程序中的几个类我想获得字符串全局值而不使用Context
。 如果我在Application
类,SharedPreferences
或Strings.xml
中声明这个变量,那么我必须使用Context
来获取/设置它的值。如何在不使用上下文的情况下声明全局变量?
使用单身人士不是一个好的做法,因为我从this post了解。 没有使用全局变量而不使用context
的好方法吗?
从我的应用程序中的几个类我想获得字符串全局值而不使用Context
。 如果我在Application
类,SharedPreferences
或Strings.xml
中声明这个变量,那么我必须使用Context
来获取/设置它的值。如何在不使用上下文的情况下声明全局变量?
使用单身人士不是一个好的做法,因为我从this post了解。 没有使用全局变量而不使用context
的好方法吗?
创建一个全局类或将字符串存储在“有意义”的地方。举例来说,如果你有一流的鞋,你可以这样做:
public class Shoes {
public static class BRAND {
public static final String NIKE = "nike";
public static final String REBOK = "rebok";
public static final String ADDIDAS = "addidas";
}
private String brand;
public Shoes() {}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return this.brand;
}
}
现在你可以这样做:
public static void main(String[] args) {
Shoes myShoes = new Shoes();
myShoes.setBrand(Shoes.BRAND.NIKE);
}
你会发现有这样的Android的很多事情。如果你使用枚举,那会更好。希望这可以帮助。
UPDATE
如果你想使用getter和setter方法,然后有2个解决方案:
您可以利用静态初始值设定项和静态方法。你可以只取出最后宣言和你想要做什么用的字符串,像这样:
public class Shoes {
public static class BRAND {
public static String NIKE;
public static String REBOK;
public static String ADDIDAS;
static {
NIKE = "nike";
REBOK = "rebok";
ADDIDAS = "addidas";
}
}
private String brand;
public Shoes() {}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return this.brand;
}
}
或者使用良好的封装做法,这样做:
public class Shoes {
public static class BRAND {
private static String NIKE;
private static String REBOK;
private static String ADDIDAS;
static {
NIKE = "nike";
REBOK = "rebok";
ADDIDAS = "addidas";
}
public static String getNIKE() {
return NIKE;
}
public static void setNIKE(String name) {
NIKE = name;
}
public static String getREBOK() {
return REBOK;
}
public static void setREBOK(String name) {
REBOK = name;
}
public static String getADDIDAS() {
return ADDIDAS;
}
public static void setADDIDAS(String name) {
ADDIDAS = name;
}
}
private String brand;
public Shoes() {}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return this.brand;
}
}
但是我必须指出:如果你这样做是因为你无法获得上下文,那么你错过了一些东西。上下文可以从任何地方获得 - 由系统实例化的对象被赋予上下文作为参数。如果你有自己的自定义对象,你可以传递ApplicationContext作为参数或使用对象本身的类(this)。
将值存储在strings.xml文件中。然后像这样称呼它。
String yourString = Context.getResources().getString(R.string.your_string);
他说他不想使用上下文,而'Context.getResources()'是无效的,因为这不是一个静态方法。 – MByD
“非静态方法getResources()不能从静态上下文中引用” – Sviatoslav
调用getApplicationContext()或getBaseContext() – JakeWilson801
NIKE,REBOK和ADDIDAS在你的例子中是常量。但我正在谈论变量......我必须有机会获得/设置它的价值。 – Sviatoslav
我会为你更新我的解决方案。 – jjNford