2012-05-06 64 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

相關問題