如何在安卓中使用getSharedPreferences

85

我有一个应用程序需要实现“登录”功能。 我有以下组件:

  1. EditText用户名
  2. EditText密码
  3. 按钮“登录”
  4. 按钮“取消”

我希望一旦用户登录,我的应用程序可以记住用户的登录详细信息,直到用户按下“注销”按钮。 我没有在我的xml中使用首选项。

如何在我的应用程序中使getSharedPreferences(String name,int mode)正常工作?

4个回答

166

首先使用以下代码获取SharedPreferences实例:

SharedPreferences userDetails = context.getSharedPreferences("userdetails", MODE_PRIVATE);

现在需要将这些值保存到SharedPreferences中。

Editor edit = userDetails.edit();
edit.putString("username", username.getText().toString().trim());
edit.putString("password", password.getText().toString().trim());
edit.apply();

上述代码将会把用户名和密码写入到偏好设置(preference)中

现在,如果你要检索保存在偏好设置中的值,你可以使用以下代码:

String userName = userDetails.getString("username", "");
String password = userDetails.getString("password", "");

(注:不建议在应用程序中保存密码。您应该在保存密码之前加密密码或跳过保存密码)


1
嗯..我有另一个问题..如何恢复偏好设置? - CMA
21
注意:除非进行加密,否则不要存储像这样的敏感信息的密码。 - Edward Q. Bridges
1
@eqbridges。非常准确!偏好设置存储在设备上的xml文件中。API只需从文件中写入和读取即可。请务必不要存储密码。 - fasholaide

19
//Set Preference
SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
SharedPreferences.Editor prefsEditor;  
prefsEditor = myPrefs.edit();  
//strVersionName->Any value to be stored  
prefsEditor.putString("STOREDVALUE", strVersionName);  
prefsEditor.commit();

//Get Preferenece  
SharedPreferences myPrefs;    
myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);  
String StoredValue=myPrefs.getString("STOREDVALUE", "");

试试这个...


12
MODE_WORLD_READABLE 不适合存储敏感数据,而且在 API 级别 17 中已被弃用。 - Tamás Szincsák
1
MODE_WORLD_READABLE目前已不建议使用! - Jorgesys

3
如果有人使用了这个:
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)

PreferenceManager现已被弃用,重构为:

val sharedPreferences = context.getSharedPreferences(context.packageName + "_preferences", Context.MODE_PRIVATE)

getDefaultSharedPreferences() 仍然适用于 SettingsActivity.java 和链接的 root_preferences.xml 文件,用户可以在其中设置他们的偏好设置。 - Bokili Production

2

在阅读了很多资料后,只有以下方法有效: 在类中设置共享偏好:

SharedPreferences userDetails = getApplicationContext().getSharedPreferences("test", MODE_PRIVATE);
SharedPreferences.Editor edit = userDetails.edit();
edit.clear();
edit.putString("test1", "1");
edit.putString("test2", "2");
edit.commit();

在AlarmReciever中:

SharedPreferences userDetails = context.getSharedPreferences("test", Context.MODE_PRIVATE);
String test1 = userDetails.getString("test1", "");
String test2 = userDetails.getString("test2", "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接