我检查了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- 你给的链接是文档和界面,不是你得到的SharedPreferences的实际实现。
- 你不能保证每次调用
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());