2013-04-16 3 views
5

클래스에 사용 된 키 - 값 쌍을 별도의 인터페이스에 저장하는 것이 좋습니까, 아니면 strings.xml에 저장하는 것이 더 좋습니까?클래스와 관련된 키를 저장하는 모범 사례

:

<string name="PREF1">pref1</string> 
<string name="PREF2">pref2</string> 

을 그리고 접근 :

public interface PreferenceKeys { 
    static final String PREF1 = "pref1"; 
    static final String PREF2 = "pref2"; 
} 

그리고는 string.xml에 이름 - 값 쌍으로 저장 PreferenceKeys.PREF1

로 내 코드에 액세스 그것은 내 수업에서 :

String pref1 = getResources().getString(R.string.PREF1); 
+0

가능한 경우 java로 저장하십시오. 필요한 경우 conf 파일에 저장하십시오. – ZhongYu

+0

인터페이스에 환경 설정 키를 저장하는 이유는 무엇입니까? 하나는 XML 파일 (PreferenceScreen, PreferenceCategory 등)에서 환경 설정을 정의 할 수 있다는 것입니다. 이 경우 안드로이드 : 키 값을 정의해야하며 거기에서 우리는 자바 클래스에 접근 할 수 없다. android : defaultValue와 동일합니다. – Ewoks

답변

2

환경 설정 저장소에서 한 작업을 공유하고 싶습니다. SharedPreferences이라는 안드로이드 빌드를 사용합니다.

public static final String USER_DATA_FIELD_NAME_AUTHKEY = "new_AuthKey"; 
public static final String USER_DATA_FIELD_NAME_EMAIL = "new_Email"; 
public static final String USER_DATA_FIELD_NAME_PASSWORD = "new_Password"; 
public static final String USER_DATA_FIELD_NAME_BIRTHDATE = "new_Birthday"; 
public static final String USER_DATA_FIELD_NAME_PREFACTURE = "new_Prefacture"; 
public static final String USER_DATA_FIELD_NAME_BLOODTYPE = "new_BloodType"; 
public static final String USER_DATA_FIELD_NAME_BODYTYPE = "new_IdealBodyType"; 
public static final String USER_DATA_FIELD_NAME_DURATIONPERIOD = "new_Duration"; 
public static final String USER_DATA_FIELD_NAME_STABILITY = "new_Stability"; 
public static final String USER_DATA_FIELD_NAME_SKINTYPE = "new_Skin"; 
public static final String USER_DATA_FIELD_NAME_RELATIONSHIP = "new_Relationship"; 
public static final String USER_DATA_FIELD_NAME_HEIGHT = "new_Height"; 
public static final String USER_DATA_FIELD_NAME_WEIGHT = "new_Weight"; 
public static final String USER_DATA_FIELD_NAME_PHY_1 = "new_phy1"; 
public static final String USER_DATA_FIELD_NAME_PHY_2 = "new_phy2"; 

이를 사용 : 위의 코드에서

package tv.gsgw.android.garusuta.model; 

import id.flwi.util.ActivityUtil; 
import tv.gsgw.android.garusuta.constant.DataConstant; 
import android.content.Context; 

public class UserModel implements DataConstant { 
    Context _context; 

    private String authKey = ""; 
    private String email = ""; 
    private String password = ""; 
    private String birthdate = ""; 
    private String prefacture = ""; 
    private String bloodType = ""; 
    private String idealBodyType = ""; 
    private String duration = ""; 
    private String stability = ""; 
    private String skin = ""; 
    private String relationship = ""; 
    private String height = ""; 
    private String weight = ""; 
    private boolean registerDataChange = false; 

    public UserModel(Context context){ 
     this._context = context; 
     loadFromPreferences(); 
    } 

    public void loadFromPreferences(){ 
     setAuthKey(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_AUTHKEY, "")); 
     setEmail(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_EMAIL, "")); 
     setPassword(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_PASSWORD, "")); 
     setBirthdate(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_BIRTHDATE, "")); 
     setPrefacture(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_PREFACTURE, "")); 
     setBloodType(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_BLOODTYPE, "")); 
     setIdealBodyType(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_BODYTYPE, "")); 
     setPeriod(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_DURATIONPERIOD, "")); 
     setStability(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_STABILITY, "")); 
     setSkin(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_SKINTYPE, "")); 
     setRelationship(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_RELATIONSHIP, "")); 
     setHeight(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_HEIGHT, "")); 
     setWeight(ActivityUtil.getSharedPreferenceString(_context, USER_DATA_FIELD_NAME_WEIGHT, "")); 
     setRegisterDataChange(ActivityUtil.getSharedPreferenceBoolean(_context, USER_DATA_FIELD_REGISTER_DATACHANGE, false)); 
    } 

    public void saveIntoPreferences(){ 
     saveIntoPreferences(true); 
    } 
    public void saveIntoPreferences(boolean datachanged){ 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_AUTHKEY, getAuthKey()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_EMAIL, getEmail()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_PASSWORD, getPassword()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_BIRTHDATE, getBirthdate()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_PREFACTURE, getPrefacture()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_BLOODTYPE, getBloodType()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_BODYTYPE, getIdealBodyType()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_DURATIONPERIOD, getPeriod()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_STABILITY, getStability()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_SKINTYPE, getSkin()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_RELATIONSHIP, getRelationship()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_HEIGHT, getHeight()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_NAME_WEIGHT, getWeight()); 
     ActivityUtil.setSharedPreference(_context, USER_DATA_FIELD_REGISTER_DATACHANGE, datachanged); 
    } 

    public String getAuthKey() { 
     return authKey; 
    } 

    public void setAuthKey(String authKey) { 
     this.authKey = authKey; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getBirthdate() { 
     return birthdate; 
    } 

    public void setBirthdate(String birthdate) { 
     this.birthdate = birthdate; 
    } 

    public String getPrefacture() { 
     return prefacture; 
    } 

    public void setPrefacture(String prefacture) { 
     this.prefacture = prefacture; 
    } 

    public String getBloodType() { 
     return bloodType; 
    } 

    public void setBloodType(String bloodType) { 
     this.bloodType = bloodType; 
    } 

    public String getIdealBodyType() { 
     return idealBodyType; 
    } 

    public void setIdealBodyType(String idealBodyType) { 
     this.idealBodyType = idealBodyType; 
    } 

    public String getPeriod() { 
     return duration; 
    } 

    public void setPeriod(String period) { 
     this.duration = period; 
    } 

    public String getSkin() { 
     return skin; 
    } 

    public void setSkin(String skin) { 
     this.skin = skin; 
    } 

    public String getRelationship() { 
     return relationship; 
    } 

    public void setRelationship(String relationship) { 
     this.relationship = relationship; 
    } 

    public String getHeight() { 
     return height; 
    } 

    public void setHeight(String height) { 
     this.height = height; 
    } 

    public String getWeight() { 
     return weight; 
    } 

    public void setWeight(String weight) { 
     this.weight = weight; 
    } 

    public boolean isRegisterDataChange() { 
     return registerDataChange; 
    } 

    public void setRegisterDataChange(boolean registerDataChange) { 
     this.registerDataChange = registerDataChange; 
    } 

    public String getStability() { 
     return stability; 
    } 

    public void setStability(String stability) { 
     this.stability = stability; 
    } 

    public void setRegistrationChanged(boolean dataChange) { 
     this.registerDataChange = dataChange; 
    } 

    public String toString(){ 
     String str = ""; 

     str += "authKey: " + authKey + "\n"; 
     str += "email: " + email + "\n"; 
     str += "password: " + password + "\n"; 
     str += "birthdate: " + birthdate + "\n"; 
     str += "prefacture: " + prefacture + "\n"; 
     str += "bloodType: " + bloodType + "\n"; 
     str += "idealBodyType: " + idealBodyType + "\n"; 
     str += "duration: " + duration + "\n"; 
     str += "stability: " + stability + "\n"; 
     str += "skin: " + skin + "\n"; 
     str += "relationship: " + relationship + "\n"; 
     str += "height: " + height + "\n"; 
     str += "weight: " + weight + "\n"; 
     str += "registerDataChange: " + (registerDataChange ? "true" : "false") + "\n"; 

     return str; 
    } 

} 

DataConstant이 같은 일정 변수를 포함하는 단지 클래스 : 쉬운 접근을 위해, 나는 SharedPreferences 래퍼 이런 코드가 UserModel라는 만들

package id.flwi.util; 

/** 
* @author Arief Bayu Purwanto 
*/ 
import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.util.Calendar; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 

public class ActivityUtil { 
    public static final String PREFS_NAME = "____MyPrefsFile"; 

    public static void debugExtra(Bundle extras){ 
     if(extras != null) { 
      Log.i("Log", "printing all extras information"); 
      java.util.Set<String> keys = extras.keySet(); 
      java.util.Iterator<String> keyIterator = keys.iterator(); 
      int index = 0; 
      while(keyIterator.hasNext()) { 
       Log.i("log", " extras #" + (++index) + ": " + keyIterator.next()); 
      } 
     } else { 
      Log.i("Log", "empty extras"); 
     } 
    } 

    public static boolean getSharedPreferenceBoolean(Context c, String preference){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getBoolean(preference, false); 
    } 
    public static boolean getSharedPreferenceBoolean(Context c, String preference, boolean defaultValue){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getBoolean(preference, defaultValue); 
    } 
    public static String getSharedPreferenceString(Context c, String preference){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getString(preference, ""); 
    } 
    public static String getSharedPreferenceString(Context c, String preference, String defaultValue){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getString(preference, defaultValue); 
    } 
    public static int getSharedPreferenceInt(Context c, String preference, int defaultValue){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getInt(preference, defaultValue); 
    } 

    public static long getSharedPreferenceLong(Context c, String preference, long defaultValue){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     return settings.getLong(preference, defaultValue); 
    } 

    public static void setSharedPreference(Context c, String preference, boolean prefValue){ 

     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean(preference, prefValue); 
     editor.commit(); 
    } 

    public static void setSharedPreference(Context c, String preference, Long prefValue){ 

     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putLong(preference, prefValue); 
     editor.commit(); 
    } 

    public static void setSharedPreference(Context c, String preference, int prefValue){ 

     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putInt(preference, prefValue); 
     editor.commit(); 
    } 
    public static void setSharedPreference(Context c, String preference, String prefValue){ 
     SharedPreferences settings = c.getSharedPreferences(ActivityUtil.PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(preference, prefValue); 
     editor.commit(); 
    } 

} 

사용하기 쉽도록 만드는 유틸리티 클래스입니다. 간단한 etty :

  1. 데이터를로드하려면, 당신은 단지 전화를해야 :

    UserModel sharedData = new UserModel(getApplicationContext()); 
    
  2. 변경하거나 데이터를 단지가 연결된 필드 게터/세터 전화를 검색하려면 :

    sharedData.getPassword(); 
    sharedData.setPassword("new password"); 
    
  3. 마지막으로 입력란을 변경 한 경우 saveIntoPreferences을 잊지 마세요.

    sharedData.saveIntoPreferences(); 
    

문제 해결을 위해 도움이 되길 바랍니다.

+0

이것은 정답입니다. 다른 답변은 간단한 말도 안되지만 다른 저자가 안드로이드에 관심이없는 시점이었던 것 같습니다. 것은 기본 설정이 xml 레이아웃에서도 정의 될 수 있으며 해당 위치 키에서 기본값이 제공되어야한다는 것입니다. 그것들이 xml로부터 java 클래스의 원인으로 정의된다면 우리는 그 상수에 접근 할 수 없을 것입니다. – Ewoks

0

제 의견으로는 메모리 누수를 피하거나 자원을로드하지 않기 위해 프로젝트의 "컨텍스트"사용을 최소화하십시오.

공유 환경 설정은 좋은 옵션이지만 응용 프로그램 또는 activit의 컨텍스트를 사용해야합니다. 몇 가지 동적 값을 유지하려는 경우 자주 사용됩니다.

Java 인터페이스는 최종 구성원 (정적) 만 사용하며 코드에서 매우 작고 사용하기 쉽습니다. 항상 정적 인 변경 불가능한 회원 (예 : ip, password 등)을 사용하십시오.

또한, 사용 열거 예를

public interface Preferences { 
    public String HOST = "http://xxx.xxx.xxx.xxx"; 
    public String PREF1 = "pref1"; 
    public String PREF2 = "pref2"; 
    public enum Connection { CONNECTED, DISCONNECTED, UNKNOWN } 
} 
+0

실제로 당신의 요점이 무엇인지 이해하지 못했습니까? – Ewoks

0

당신은 자바 클래스를 사용하는 것이 최대의 또는 sharedPreference에, 그들 사이의 diffenerce이 목적이다가, 응용 프로그램에서 상태 또는 다른 물건을 관리 할 수 ​​있습니다. 내 생각에, 저장 상수를 원한다면 단지 Enum을 확장하는 java 클래스를 사용하면된다. 그렇지 않으면 sharedPreference에 저장된 사용자 데이터, 세션 데이터, ariefbayu의 대답을 참조 할 수 있지만 내 조언에 필드 값을 얻기 위해 반영하십시오.

0

나는 레이아웃 파일에서 사용해야하는 리소스에 strings.xml을 사용하는 것을 선호합니다. 클래스에서 액세스해야하는 변수의 경우 interface 방식을 선호합니다.

관련 문제