【发布时间】:2012-07-01 03:04:59
【问题描述】:
我想使用 SharedPreferences 存储和检索我的应用程序中的所有活动都可以访问的数据。那可能吗?到目前为止,我一直在这样做,以便为特定活动存储数据。
【问题讨论】:
-
也可以使用默认的preference文件,见this
我想使用 SharedPreferences 存储和检索我的应用程序中的所有活动都可以访问的数据。那可能吗?到目前为止,我一直在这样做,以便为特定活动存储数据。
【问题讨论】:
是的。 SharePreferences 正是这样做的。 在每项活动中,您都可以这样做:
SharedPreferences prefs = getSharedPreferences(ApplicationConstants.PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(name, value);
editor.commit();
然后在其他活动中检索值:
mPrefs.getString(name, "");
这是文档: http://developer.android.com/reference/android/content/SharedPreferences.html
这是一个很好的例子:
http://myandroidsolutions.blogspot.it/2012/03/android-preferenceactivity.html
【讨论】:
是的,这就是它的全部目的。
这是你应该如何写信给它的,通过Editor
final SharedPreferences shp = ctx.getSharedPreferences(ctx.getString(R.string.app_name), Context.MODE_PRIVATE);
final SharedPreferences.Editor ed = shp.edit();
ed.putString("var1", "var1");
ed.putString("var2", "var2");
并加载它:
shp.getString("var1", "defvalue");
【讨论】:
我有更好的版本。有时当您尝试执行 getSharedPreferences 时,您可能会收到一个错误,因为它无法找到。 这就是我在我的 Android 项目中存储值的方式。
添加
SharedPreferences sharedPreferences=this.getSharedPreferences("packagename", Context.MODE_PRIVATE);
sharedPreferences.edit().putString("username", "specify name here").apply();
包名可以直接从活动顶部复制,例如:com.example.name.projectname
检索
String username = sharedPreferences.getString("username","");
【讨论】:
如果您想访问所有活动中的值,我认为更好的方法是存储在自定义应用程序类中,然后您可以:
((CustomApplication)getApplication()).getStoredValue()
共享首选项存储在文件中,此文件访问速度较慢。
【讨论】:
是我的示例,用于设置和获取名为“USER”的对象数据的创建函数
用于设置 sharePreference 数据
public void saveUser(User usuario) {
SharedPreferences sharedPref = getSharedPreferences("A", Context.MODE_PRIVATE); // sharedpreference set named "A"
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("name", usuario.getNombre());
editor.putString("username", usuario.getUsername());
editor.putString("pass", usuario.getContrasena());
editor.putString("roll",usuario.getRol());
editor.commit();
}
获取 sharePreference 数据
public Usuario getUser() {
SharedPreferences sharedPref = getSharedPreferences("A", Context.MODE_PRIVATE); // sharedpreference set named "A"
User usuario = new User();
usuario.setNombre(sharedPref.getString("name", "null"));
usuario.setUsername(sharedPref.getString("username", "null"));
usuario.setContrasena(sharedPref.getString("pass", "null"));
usuario.setRol(sharedPref.getString("roll", "null"));
return usuario;
}
重要提示:在本例中将 name 设置为 sharePreference 为“A”
【讨论】: