前提・実現したいこと
アプリ起動時に、SharedPreferencesの値を読み込んで、
アプリ終了時に、SharedPreferencesの値を書き込むことを考えています。
具体的には、前回のスクロールビューのスクロール位置を起動時に復元することを考えています。
スクロールビューの実装はまだしてませんが、
とりあえず、この用途でのSharedPreferencesの値の読み書きの設計についての質問です。
このようなとき、SharedPreferencesは、各メソッドごとに宣言して用意するのが適切でしょうか?
もしくはフィールドに宣言しておいた方がよいのでしょうか?
また、起動時の値の読み込みはonCreateメソッドで、終了時の値の書き込みはonDestroyメソッドで
実装するのは適切でしょうか?
また、今回はおそらくスクロール位置だけの単一のデータの読み書きとなると思いますが、
多めの複数データの読み書きとなってくると、SharedPreferencesの宣言方法はどちらが適切になるとか、
変わってきたりするものでしょうか?
試したこと
実際にそれぞれのコードを書いてみて、挙動を確認してみました。
予想に反して、データの書き込みすらできてませんでした
(既に、"string1", "value1"というキーと値のペアで保存していた場合、"string1", "value2"に書き直せないという挙動でした。)
すみません、質問が増えてしまいますが、
上記質問に加えて、今回試したコードでデータの書き換えができないのは何故でしょうか?
ご教示お願いします。
・各メソッドごとで宣言する場合。
Java
1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 9 String s1 = prefs.getString("string1", ""); 10 Log.d("mytag", s1); 11 } 12 13 @Override 14 public void onDestroy(){ 15 super.onDestroy(); 16 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 17 SharedPreferences.Editor editor = prefs.edit(); 18 editor.putString("string1", "value1"); 19 editor.apply(); 20 } 21 22}
・フィールドで宣言して使い回す場合。
Java
1public class MainActivity extends AppCompatActivity { 2 3 SharedPreferences prefs; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 prefs = PreferenceManager.getDefaultSharedPreferences(this); 11 String s1 = prefs.getString("string1", ""); 12 Log.d("mytag", s1); 13 } 14 15 @Override 16 public void onDestroy(){ 17 super.onDestroy(); 18 SharedPreferences.Editor editor = prefs.edit(); 19 editor.putString("string1", "value1"); 20 editor.apply(); 21 } 22 23}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/06/11 16:17