LoginSignup
26
24

More than 5 years have passed since last update.

Androidアプリ内データ保存「SharedPreferences」

Last updated at Posted at 2015-03-19

yotsuba_s.jpg SharedPreferences

Androidアプリ内に手っ取り早くデータ保存するには「SharedPreferences」というのを使うようです。保存可能なデータ型は限られるようですが、よく使うと思われる、
 1)String
 2)Set<String>
 3)ArrayList<String>
の3パターンについて「保存/取得」処理をまとめました。

yotsuba_s.jpg 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が存在しない時に返す初期値
}

yotsuba_s.jpg 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を使います。

yotsuba_s.jpg 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として保存/取得します。

churippu_s.png おまけ

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・ゞ いじょー。

26
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
24