Зачем использовать объект SharedPreferences.Editor для изменения данных, а не SharedPreferencesInstace.edit ()? - PullRequest
0 голосов
/ 24 августа 2011

Я проверяю пример SharedPreferences и интересуюсь кодом для модификации данных в SharedPreferences:

SharedPreferences preferences = getSharedPreferences (name, MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Greeting", "Welcome to sharedpreferences!");
editor.commit();
Log.d("shared preferences", preferences.getAll().toString());

Интересно, почему строки от второго до четвертого:

SharedPreferences.Editor editor = preferences.edit();
editor.putString("Greeting", "Welcome to sharedpreferences!");
editor.commit();

не может переписать как:

preferences.edit().putString("Greeting", "Welcome to sharedpreferences!");
preferences.edit().commit();

LogCat не показывает значения пары ключей после этого изменения. Кажется, невозможно написать таким способом. Просто удивляетесь, почему необходимо объявлять объект SharedPreferences.Editor, а не вызывать его напрямую из класса SharedPreferences?

Исходный код SharedPreferences:

http://www.java2s.com/Open-Source/Android/UnTagged/dexandroid/android/content/SharedPreferences.java.htm

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Вы можете переписать его как:

SharedPreferences preferences = getSharedPreferences(name, MODE_PRIVATE);
preferences.edit()
    .putString("Greeting", "Welcome to sharedpreferences!")
    .commit();
Log.d("shared preferences", preferences.getAll().toString());
0 голосов
/ 24 августа 2011
  1. Ссылка, которую вы дали, предназначена для документации и интерфейса, а не для фактической реализации SharedPreferences, которую вы получили.
  2. Вам не обещают получать один и тот же редактор каждый раз, когда вы вызываете edit(), поэтомувызов commit on editor не будет фиксировать изменения в объекте preferences.edit(), поскольку это может быть отдельный объект.

В вашем примере:

  SharedPreferences.Editor editor = preferences.edit(); 
//                         ^object #1
  editor.putString("Greeting", "Welcome to sharedpreferences!"); 
//^object #1
  editor.commit();
//^object #1
  preferences.edit().putString("Greeting", "Welcome to sharedpreferences!"); 
//             ^object #2
  editor.commit();
//^object #1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...