2012-05-06 21 views
0

私のアプリのいくつかのクラスから、Contextを使わずにStringグローバル値を取得したいと思います。私はApplicationクラス、SharedPreferencesまたはStrings.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

あなたはセッターとゲッターを使用したい場合は、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

関連する問題