자동 로그인 여부, 또는 설정에서 저장했던 값 등
앱이 종료되어도 보존되어야 하는 데이터를 저장할 때
흔히 SharedPreferences를 사용한다.
SharedPreferences pref = mContext.getSharedPreferences(com.exam.pref,
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("key", value);
editor.commit();
보통 이런식으로 사용하는데 이는 키 값을 수정 할 일이 있거나
찾을 일이 있을 때 따로 키 목록을 작성해
놓은 곳이 없다면 나중에 관리가 힘들어지는 단점이 있다.
그래서 아예 Preference 클래스를 하나 만들어 두고 그 클래스에
int, String, boolean을 담고 꺼내는 getter, setter 매소드와
사용하는 키 값을 모두 선언하여
클래스에 점만 찍으면 키, 저장, 꺼내쓰기가 가능하도록 하였다.
public class RbPreference {
private final String PREF_NAME = "com.rabiaband.pref";
public final static String PREF_INTRO_USER_AGREEMENT = "PREF_USER_AGREEMENT";
public final static String PREF_MAIN_VALUE = "PREF_MAIN_VALUE";
static Context mContext;
public RbPreference(Context c) {
mContext = c;
}
public void put(String key, String value) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(key, value);
editor.commit();
}
public void put(String key, boolean value) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean(key, value);
editor.commit();
}
public void put(String key, int value) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putInt(key, value);
editor.commit();
}
public String getValue(String key, String dftValue) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
try {
return pref.getString(key, dftValue);
} catch (Exception e) {
return dftValue;
}
}
public int getValue(String key, int dftValue) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
try {
return pref.getInt(key, dftValue);
} catch (Exception e) {
return dftValue;
}
}
public boolean getValue(String key, boolean dftValue) {
SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME,
Activity.MODE_PRIVATE);
try {
return pref.getBoolean(key, dftValue);
} catch (Exception e) {
return dftValue;
}
}
}
위와 같이 상단에 각각 사용할 키를 선언하고 타입별로 같은 이름의 setter,getter 매소드를
만들어 놓으면 어디서든 위 클래스를 이용하여 해당키와 한가지 매소드로 원하는 작업 수행이 가능하다.
RbPreference pref = new RbPreference(this);
// set
pref.put(RbPreference.PREF_USER_AGREEMENT, true);
// get
pref.getValue(RbPreference.PREF_USER_AGREEMENT, false);