2012-05-06 67 views
0

从我的应用程序中的几个类我想获得字符串全局值而不使用Context。 如果我在Application类,SharedPreferencesStrings.xml中声明这个变量,那么我必须使用Context来获取/设置它的值。如何在不使用上下文的情况下声明全局变量?

使用单身人士不是一个好的做法,因为我从this post了解。 没有使用全局变量而不使用context的好方法吗?

回答

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的很多事情。如果你使用枚举,那会更好。希望这可以帮助。

UPDATE

如果你想使用getter和setter方法,然后有2个解决方案:

  1. 首先你需要的对象的实例,因为你只需要一个实例单身设计模式将是必需的。真的,如果你同步正确,设计有意义,他们可以非常好,有用。在你的情况下,我认为这不值得工作。
  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)。

+0

NIKE,REBOK和ADDIDAS在你的例子中是常量。但我正在谈论变量......我必须有机会获得/设置它的价值。 – Sviatoslav

+0

我会为你更新我的解决方案。 – jjNford

0

将值存储在strings.xml文件中。然后像这样称呼它。

String yourString = Context.getResources().getString(R.string.your_string); 
+0

他说他不想使用上下文,而'Context.getResources()'是无效的,因为这不是一个静态方法。 – MByD

+0

“非静态方法getResources()不能从静态上下文中引用” – Sviatoslav

+0

调用getApplicationContext()或getBaseContext() – JakeWilson801

相关问题