
在 上一篇 中“欢乐购商城”的登录页面使用了文件存储的方式实现了,但是在实际应用中,通常采用SharedPreferences类进行存储。
分析
在登录页面上实现保存用户名和密码的功能,可以采用SharedPreferences类,SharedPreferences类很适合保存用户名、密码之类的简单配置信息,如图7-9所示。
■ 图7-9登录页面
通常用户在使用Android应用时,都会根据自己的爱好进行简单的设置,例如,设置背景颜色、记录用户名和密码、登录状态等,为了使用户下次打开应用时不需要重复设置,应用程序需要保存这些设置信息。Android提供了一个SharedPreferences接口,来保存配置参数。应用程序使用SharedPreferences接口可以快速而高效地以键值对的形式保存数据,信息以XML文件的形式存储在Android设备上。SharedPreferences本身是一个接口,不能直接实例化,但Android的Context类提供了方法可以获取SharedPreferences实例。
SharedPreferences数据操作
1
●
使用SharedPreferences存储数据
使用SharedPreferences类存储数据时,首先需要调用getSharedPreferences(String name,int mode)方法获取实例对象。在该方法中需要传递两个参数,第一个参数表示保存信息的文件名,不需要后缀,在同一个应用中可以使用多个文件保存不同的信息;第二个参数表示SharedPreferenes的访问权限,和7.1节中读取应用程序的文件类似,包括只能被本应用程序读、写和能被其他应用程序读写。由于该对象本身只能获取数据,不能对数据进行存储和修改,因此需要调用 SharedPreferences类的edit()方法获取可编辑的Editor对象,最后通过该对象的putXXX()方法存储数据,示例代码如下。
1 SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
2 SharedPreferences.Editor editor = preferences.edit();
3 editor.putString("name", "James");
4 editor.putInt("age", 25);
5 editor.commit();复制
上述代码中,第1行代码通过getSharedPreferences()获取SharedPreferences 对象,之后通过该对象的edit()方法获取Editor对象并通过相应的方法存储数据,最后通过commit()方法提交。通过上述代码,Editor对象是以key/value的形式保存数据的,其中value值只能是float、int、long、boolean、String、Set类型数据。并且根据数据类型的不同,会调用不同的方法。需要注意的是,最后一定要调用commit()方法进行数据提交,否则所有操作不生效。
2
●
使用SharedPreferences读取数据
读取SharedPreferences中的数据只需要获取SharedPreferences对象,然后通过该对象的getXXX()方法根据相应的key值获取value值。该方法需要传递两个参数: 第一个参数为关键字,即保存的时候使用的key值;第二个参数为默认值,即如果根据key值没有找到value值时,返回该默认值。程序所读取的SharedPreferences文件不存在时,程序也会返回默认值,并不会抛出异常。SharedPreferences数据总是保存在data/data//shared_prefs目录下,并且SharedPreferences数据总是以XML格式保存,实例代码如下。
1 SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
2 preferences.getString("name", "");
3 preferences.getInt("age", 0);复制
上述代码中,第1行代码通过getSharedPreferences()获取SharedPreferences 对象,之后通过该对象的getString()方法和getInt()方法获取用户名和年龄。
3
●
使用SharedPreferences删除数据
使用SharedPreferences删除数据的时候,需要先获取SharedPreferences对象,并通过该对象的edit()方法获取Editor对象。通过调用Editor对象的remove(String key)方法删除数据。该方法中的参数为关键字,即键-值对的key值。该方法会删除key相对应的数据。如果要删除所有数据可采用clear()方法。实例代码如下。
1 SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
2 SharedPreferences.Editor editor = preferences.edit();
3 editor.remove("name");
4 editor.clear();复制
上述代码中,第1行代码通过getSharedPreferences()获取SharedPreferences 对象,之后通过该对象的edit()方法获取Editor对象,通过Editor对象中的remove()和clear()方法删除数据。
实战:
SharedPreferences保存用户名和密码
通过对SharedPreferences的学习,可以对“欢乐购商城”中的登录页面进行实现。界面布局与7.1节布局相同,在此不再重复演示。在程序中创建一个工具类SPSaveInfo保存用户名和密码。
程序清单7-7: chart0704\app\src\main\java\com\example\administrator\
1 public class SPSaveInfo {
2 public static boolean saveInfoToSP(Context context, String userName, String userPwd) {
3 SharedPreferences preferences = context.getSharedPreferences("data",
Context.MODE_PRIVATE);
4 SharedPreferences.Editor editor = preferences.edit();
5 editor.putString("userName", userName);
6 editor.putString("userPwd", userPwd);
7 editor.commit();
8 return true;
9 }
10 public static Map<String, String> getInfoFromSP(Context context) {
11 HashMap<String, String> hashMap = new HashMap<>();
12 SharedPreferences preferences = context.getSharedPreferences("data", Context.MODE_PRIVATE);
13 String userName = preferences.getString("userName", "");
14 String userPwd = preferences.getString("userPwd", "");
15 hashMap.put("userName", userName);
16 hashMap.put("userPwd", userPwd);
17 return hashMap;
18 }
19 }复制
在上述代码中,第2~9行创建saveInfoToSP()方法,用于保存用户名和密码到data.xml文件中。在该方法中首先通过getSharedPreferences()方法获取到SharedPreferences对象,并通过该对象的edit()方法获取到Editor对象,并通过该对象将数据保存在文件中。
第10~18行创建一个getInfoFromSP()方法用来获取data.xml文件中保存的用户名和密码。在该方法中首先通过getSharedPreferences()方法获取到SharedPreferences对象,并通过该对象的getString()方法获取到用户名和密码,并将获取的数据存放在Map集合中。
MainActivity页面的代码如下。
程序清单7-8: chart0704\app\src\main\java\com\example\
1 public class MainActivity extends AppCompatActivity {
2 private TextView tvRegister;
3 private TextView tvFindPwd;
4 private EditText editName;
5 private EditText editPwd;
6 private Button btnLogin;
7 private String userName;
8 private String psw;
9 @Override
10 protected void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_main);
13 initView();
14 initListener();
15 Map<String, String> uerInfo = SPSaveInfo.getInfoFromSP(this);
16 if (uerInfo != null) {
17 editName.setText(uerInfo.get("userName"));
18 editPwd.setText(uerInfo.get("userPwd"));
19 }
20 }
21 private void initView() {
22 tvRegister = (TextView) findViewById(R.id.tv_register);
23 editName = (EditText) findViewById(R.id.et_user_name);
24 editPwd = (EditText) findViewById(R.id.et_psw);
25 tvRegister = (TextView) findViewById(R.id.tv_register);
26 tvFindPwd = (TextView) findViewById(R.id.tv_find_psw);
27 btnLogin = (Button) findViewById(R.id.btn_login);
28 }
29 private void initListener() {
30 btnLogin.setOnClickListener(new View.OnClickListener() {
31 @Override
32 public void onClick(View v) {
33 userName = editName.getText().toString().trim();
34 psw = editPwd.getText().toString();
35 if (userName.isEmpty() || psw.isEmpty()) {
36 Toast.makeText(MainActivity.this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();
37 return;
38 } else {
39 Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
40 boolean isSave = SPSaveInfo.saveInfoToSP(MainActivity.this, userName, psw);
41 if (isSave) {
42 Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
43 }
44 }
45 }
46 });
47 }
48 }复制
运行以上程序,在用户名和密码框中分别输入“234”,单击“登录”按钮,弹出“登录成功”和“保存成功”表示用户名和密码已经保存在本地文件中,运行结果如图7-10所示。
■ 图7-10使用sp登录成功并保存登录信息
当关闭程序再次打开程序之后,界面上会自动加载出用户名和密码,如图7-11所示。
■ 图7-11再次登录自动加载登录信息
为了验证用户信息是否成功保存到了SharedPreferences中,可以在Device File Explorer视图中找到data\\data\\com.example.administrator.chart0704\\shared_prefs目录,然后找到 data.xml文件,data.xml文件目录如图7-12所示。
■ 图7-12文件保存的位置
打开data.xml文件。
1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="userPwd">234</string>
4 <string name="userName">234</string>
5 </map>复制
使用saveInfoToSP类成功地把用户名和密码保存在文件中。从data.xml文件可知,该XML文件是以map为根节点,map元素的每个子元素代表一个key-value对,子元素的name属性值为value对应的类型名。
实例讲解
Android零基础入门到实战

精彩回顾
鸿蒙开发入门
Android中的数据存取
下期预告
Android中的数据存取
参考书籍

《Android零基础入门到实战(App项目开发·鸿蒙开发入门·微课视频版)》
ISBN:9787302600671
作者:赵圣鲁、胡颖辉、余燕萍、汪宗伟、吴微微
定价:59.8元
扫码微店优惠购书
内容简介
本书围绕Android初学者从零基础到实战达人的过程进行设计,采用项目教学法,以作者开发的“欢乐购商城”App为例,以一个完整的项目开发为主线,将项目开发分解为9个教学模块,分别为App应用体验、Android基础界面控件、Android高级界面控件、列表控件、页面跳转与切换、Android中的数据存取、Android客户端与服务器端交互、综合项目“欢乐购商城”实现等。读者在学习基础知识过程中将熟悉App综合项目开发流程,逐步培养独立开发综合项目的能力,并最终实现综合项目。同时本书引入鸿蒙开发入门知识,供有兴趣的读者参考学习。本书可作为应用型本科计算机专业、软件专业、高职软件技术专业及相关专业的教材,也可作为Android和鸿蒙开发爱好者以及初、中级Android应用开发人员的参考工具书。
编辑推荐
扫码京东优惠购书
精彩推荐
微信小程序游戏开发│猜数字小游戏(附源码+视频) Flink编程基础│Scala编程初级实践 Flink编程基础│FlinkCEP编程实践 Flink编程基础│DataStream API编程实践 Flink编程基础│DataSet API编程实践 数据分析实战│客户价值分析 数据分析实战│价格预测挑战 数据分析实战│时间序列预测 数据分析实战│KaggleTitanic生存预测