Android中如何从其他Activity获取SharedPreferences值填充至EditText实现登录
嘿,我来帮你搞定这个从其他Activity的SharedPreferences里取数据填充登录EditText的需求,其实操作起来很顺畅,咱们一步步来:
首先得保证之前存姓名、密码的地方,用的是能让当前Activity访问到的SharedPreferences实例。一般咱们会用自定义名称来创建实例,这样不会和默认的混淆,比如在注册或者账号保存页的Activity里是这么存的:
// 其他Activity(比如注册页/账号保存页)的存储代码 SharedPreferences sharedPref = getSharedPreferences("UserLoginInfo", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("username", "用户输入的用户名"); editor.putString("password", "用户输入的密码"); editor.apply(); // 用apply()异步提交,比commit()更适合UI线程场景
这里要注意:MODE_PRIVATE是默认权限,只有你的APP能访问这个SharedPreferences文件,完全符合登录信息的隐私需求。
到了登录页,咱们要拿到同一个SharedPreferences实例,名称得和存储的时候完全一致,不能写错:
// 登录Activity里获取实例 SharedPreferences sharedPref = getSharedPreferences("UserLoginInfo", Context.MODE_PRIVATE);
要是之前你用的是getPreferences(Context.MODE_PRIVATE)(只对当前Activity有效),那换个Activity就拿不到数据了,所以一定要用getSharedPreferences()自定义名称的方式。
第三步:读取数据并填充到EditText
接下来就可以读取存储的用户名和密码,然后设置到对应的EditText里。记得要处理数据不存在的情况(比如用户第一次打开APP,还没存过账号),避免空指针:
// 登录Activity的onCreate方法里 EditText usernameEt = findViewById(R.id.et_username); EditText passwordEt = findViewById(R.id.et_password); // 读取数据,第二个参数是默认值,如果找不到对应key就返回这个值 String savedUsername = sharedPref.getString("username", ""); String savedPassword = sharedPref.getString("password", ""); // 填充到EditText usernameEt.setText(savedUsername); passwordEt.setText(savedPassword);
一些额外的小提醒
- 别硬编码SharedPreferences的名称和key值!建议把它们定义成常量,比如在一个工具类里:
这样改起来方便,还不容易写错。public class AppConstants { public static final String PREF_NAME = "UserLoginInfo"; public static final String KEY_USERNAME = "username"; public static final String KEY_PASSWORD = "password"; } - 重要! 密码是敏感数据,明文存在SharedPreferences里不安全!如果你的APP要求一定的安全性,建议用AndroidX的
EncryptedSharedPreferences来加密存储,这样就算别人拿到了SharedPreferences的文件也读不出密码。 - 如果填充后需要光标自动定位到密码框,可以加一行
passwordEt.requestFocus();来提升用户体验。
这样一套操作下来,就能实现从其他Activity取SharedPreferences数据填充登录框的功能啦~
内容的提问来源于stack exchange,提问作者Yasin Khan
相关产品推荐
相关产品推荐

