タブレット用プログラムの書き止め

android OS & iPadOS の記録。

基礎。SharedPreferences String 配列の保存。

2021-12-12 12:54:17 | Android studio 日記

アプリの状態を記憶している変数をアプリ固有のPreferences領域に保存する。
いくつか種類があるが手間の少ないものを選択してみる。文字列配列の説明。お気に入りの画像ファイルのフルパスを配列保存しているのでPreferences領域に保存が必要。

 

文字列配列をプリファレンスへ保存するには Set<String> という型でないといけない。変換は簡単。

Set<String> sArray = new HashSet<String>( list );

これだけで変換は終了。ただし、大きな問題もある。Set<>型は同じ文字列の重複を許さない事。逆を言えば、重複を勝手に削除してくれる。自前で重複削除を作らなくていいのでラッキーだった。


            List<String> list = new ArrayList<>();
            list.add("ABC");
            list.add("DEF");
            list.add("ABC");

            // 書き込み
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(Context);

            Set<String> sArray = new HashSet<String>( list );
            pref.edit().putStringSet("key_list", sArray ).apply();
            sArray.clear();

実行して読み出すと
"ABC"
"DEF"
この二つしか保存されていない。

書き込むタイミングは、お気に入り登録時、onPause() 時、編集時あたりか。
読み込みは逆にList<>へ変換すれば良い。

 

            // 読み出し
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(Context);

            Set<String> sArray = pref.getStringSet("key_list", null );
            if ( sArray != null ) list = new ArrayList<String>( sArray );
            else list = new ArrayList<>();
            sArray.clear();

 

List<String> list = new ArrayList<String>( sArray );

これで List<String> へ、キャスティングしてくれるそう。
重複文字列は削除済み。重複文字列も重要であれば、保存前に処理。

list.add( i, list.get( i ) + "/" + String.valueOf( i ) );

識別文字を付加して重複を回避する。全てに付加。読み出し後に識別部分を取り去る。