앱을 사용하기 위해서 데이터를 저장할 필요가 있다. 우리는 내장된 SQLite를 사용하기도 하고, API를 연결하여 데이터를 가져오기도 한다.
하지만 이 포스트에서는 SharedPreferences를 이용하여 String, Int, Boolean을 비롯하여 ArrayList, Map 형태를 앱 내에 저장하는 방법을 소개합니다.
먼저, Android developers 사이트에서 SharedPreferences에 대해서 다음 링크에서 소개하고 있습니다.
https://developer.android.com/reference/android/content/SharedPreferences
SharedPreferences | Android 개발자 | Android Developers
developer.android.com
SharedPreferences 에서는 5가지 유형이 제공됩니다.
타입 | 유형 | 설명 |
int | MODE_APPEND | 기존 preferences에 신규 prefernces를 추가 |
int | MODE_MULTI_PROCESS | 이미 호출되어 사용 중인지 체크 |
int | MODE_PRIVATE | 생성한 application 에서만 사용 가능 |
int | MODE_WORLD_READABLE | 다른 application에서 읽을 수 있음 |
int | MODE_WORLD_WRITEABLE | 다른 application에서 기록할 수 있음 |
보통 앱을 개발하기 위해서 MODE_PRIVATE 을 사용합니다. (생성한 application에서만 관리하기 위해서)
먼저, 다음과 같은 SharedPreferences를 선언합니다.
SharedPreferences pref = getSharedPreferences("test", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
아래는 String, Int, Boolean 데이터를 저장하는 방법입니다.
public void saveSharedPreference() {
editor.putString("string", "string call");
editor.putInt("int", 77);
editor.putBoolean("boolean", true);
editor.commit();
}
그리고 저장한 데이터를 호출하는 방법입니다.
public void loadSharedPreference() {
String str = pref.getString("string", "null");
int INT = pref.getInt("int", 0)
boolean is = pref.getBoolean("boolean", false);
}
다음은 ArrayList 데이터를 저장하는 방법입니다.
public void saveArrayList(ArrayList<String> values) {
JSONArray a = new JSONArray();
for (int i = 0; i < values.size(); i++) {
a.put(values.get(i));
}
if (!values.isEmpty()) {
editor.putString("array", a.toString());
} else {
editor.putString("array", null);
}
editor.commit();
}
그리고 저장한 ArrayList 데이터를 호출하는 방법입니다.
public ArrayList<String> loadArrayList() {
String json = pref.getString("array", null);
ArrayList<String> urls = new ArrayList<>();
if (json != null) {
try {
JSONArray a = new JSONArray(json);
for (int i = 0; i < a.length(); i++) {
String url = a.optString(i);
urls.add(url);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return urls;
}
다음은 Map 형태 데이터를 저장하는 방법입니다.
public void saveHashMap(Map<String, String> inputMap){
if (pref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
editor.remove("hashmap").commit();
editor.putString("hashmap", jsonString);
editor.commit();
}
}
그리고 저장한 Map 형태 데이터를 호출하는 방법입니다.
public Map<String, String> loadHashMap(){
Map<String, String> outputMap = new HashMap<String,String>();
try{
if (pref != null){
String jsonString = pref.getString("hashmap", (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String k = keysItr.next();
String v = (String) jsonObject.get(k);
outputMap.put(k,v);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
위 소개된 예제는 다음 사이트에서 볼 수 있습니다.
https://github.com/jinseokha/blog_code/tree/master/sharedpreferences_example
jinseokha/blog_code
https://dailyseok.tistory.com/ 에 소개된 코드. Contribute to jinseokha/blog_code development by creating an account on GitHub.
github.com