2012-05-06 1 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); 
} 

당신은 안드로이드에서이 같은 많은 것들가 있습니다. enum을 대신 사용하면 더 좋습니다. 희망이 도움이됩니다.

UPDATE

당신은 세터와 게터를 사용하고자하는 경우,이 개 솔루션이 있습니다 :

  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

관련 문제