从我的应用程序中的几个类中,我希望在不使用Context
的情况下获取String全局值。
如果我在Application
类,SharedPreferences
或Strings.xml
中声明此变量,那么我必须使用Context
来获取/设置它的值。
使用 Singleton 并不是一个很好的做法,因为我从this post了解到这一点。
有没有使用全局变量的好方法而不使用context
?
答案 0 :(得分:0)
创建一个全局类或将字符串存储在“有意义”的位置。例如,如果你有类鞋,你可以这样做:
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中有很多这样的东西。如果你使用枚举,那会更好。希望这会有所帮助。
<强>更新强>
如果您想使用setter和getters,那么有两种解决方案:
您可以利用静态初始化程序和静态方法。您可以删除最终声明并使用字符串执行您想要的操作,如下所示:
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;
}
}
但是我必须注意:如果你这样做是因为你无法获得一个上下文,那么你就会遗漏一些东西。可以从任何地方获得上下文 - 由系统实例化的对象被赋予上下文作为参数。如果你有自己的自定义对象,你可以使用对象本身(this)将ApplicationContext作为参数或类传递。
答案 1 :(得分:0)
将值存储在strings.xml文件中。然后这样称呼它。
String yourString = Context.getResources().getString(R.string.your_string);