SharedPreferences
Androidアプリ内に手っ取り早くデータ保存するには「SharedPreferences」というのを使うようです。保存可能なデータ型は限られるようですが、よく使うと思われる、
1)String
2)Set<String>
3)ArrayList<String>
の3パターンについて「保存/取得」処理をまとめました。
1)String型の保存/取得
Setting.java
// 設定値 String を保存(Context は Activity や Application や Service)
public static void saveString(Context ctx, String key, String val) {
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, val);
editor.apply();
}
// 設定値 String を取得(Context は Activity や Application や Service)
public static String loadString(Context ctx, String key) {
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
return prefs.getString(key, ""); // 第2引数はkeyが存在しない時に返す初期値
}
2)Set<String>型の保存/取得
Setting.java
// 設定値 Set<String> を保存(Context は Activity や Application や Service)
public static void saveStringSet(Context ctx, String key, Set<String> vals) {
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(key, vals);
editor.apply();
}
// 設定値 Set<String> を取得(Context は Activity や Application や Service)
public static Set<String> loadStringSet(Context ctx, String key) {
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
return prefs.getStringSet(key, new HashSet<String>()); // 第2引数はkeyが存在しない時に返す初期値
}
Setは順序が不定なので、順序を保持したい場合は、下記のArrayListを使います。
3)ArrayList<String>型の保存/取得
Setting.java
// 設定値 ArrayList<String> を保存(Context は Activity や Application や Service)
public static void saveList(Context ctx, String key, ArrayList<String> list) {
JSONArray jsonAry = new JSONArray();
for(int i=0; i<list.size(); i++) {
jsonAry.put(list.get(i));
}
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, jsonAry.toString());
editor.apply();
}
// 設定値 ArrayList<String> を取得(Context は Activity や Application や Service)
public static ArrayList<String> loadList(Context ctx, String key) {
ArrayList<String> list = new ArrayList<String>();
SharedPreferences prefs = ctx.getSharedPreferences(APP_NAME, Context.MODE_PRIVATE);
String strJson = prefs.getString(key, ""); // 第2引数はkeyが存在しない時に返す初期値
if(!strJson.equals("")) {
try {
JSONArray jsonAry = new JSONArray(strJson);
for(int i=0; i<jsonAry.length(); i++) {
list.add(jsonAry.getString(i));
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
return list;
}
ArrayListは直接保存できないので、JSONArrayを介して、Stringとして保存/取得します。
おまけ
■Set<String>
をループで回す
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String str = it.next();
}
■Set<String>
⇒ String[]
への変換
String[] ary = (String[])set.toArray(new String[]{});
■ArrayList<String>
⇒ String[]
への変換
String[] ary = (String[])list.toArray(new String[]{});
(・o・ゞ いじょー。