为什么要使用SharedPreferences ?编辑器对象来修改数据,而不是SharedPreferencesInst



我检查了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。编辑器对象,而不是直接从SharedPreferences类调用?

sharepreferences的源代码:

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

  1. 你给的链接是文档和界面,不是你得到的SharedPreferences的实际实现。
  2. 你不能保证每次调用edit()都得到相同的编辑器,所以在editor上调用commit不会提交对象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

可以重写为:

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

最新更新