SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据。
代码如下:
1 //实例化SharedPreferences对象(第一步)
2 SharedPreferences mySharedPreferences= getSharedPreferences("test",
3 Activity.MODE_PRIVATE);
4 //实例化SharedPreferences.Editor对象(第二步)
5 SharedPreferences.Editor editor = mySharedPreferences.edit();
6 //用putString的方法保存数据
7 editor.putString("name", "Karl");
8 editor.putString("habit", "sleep");
9 //提交当前数据
10 editor.commit();
11 //使用toast信息提示框提示成功写入数据
12 Toast.makeText(this, "数据成功写入SharedPreferences!" ,
13 Toast.LENGTH_LONG).show();
执行以上代码,SharedPreferences将会把这些数据保存在test.xml文件中,可以在File Explorer的data/data下导出该文件,并查看。
那么已经保存好的数据如何读取出来呢。我们来看:
1 //同样,在读取SharedPreferences数据前要实例化出一个SharedPreferences对象
2 SharedPreferences sharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE);
3 // 使用getString方法获得value,注意第2个参数是value的默认值
4 String name =sharedPreferences.getString("name", "");
5 String habit =sharedPreferences.getString("habit", "");
6 //使用toast信息提示框显示信息
7 Toast.makeText(this, "读取数据如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit, Toast.LENGTH_LONG).show();
程序源代码如下:
1 public class Main extends Activity
2 {
3 @Override
4 public void onCreate(Bundle savedInstanceState)
5 {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.main);
8 }
9
10 public void onClick_WriteData(View view)
11 {
12 SharedPreferences mySharedPreferences = getSharedPreferences("test",
13 Activity.MODE_PRIVATE);
14 SharedPreferences.Editor editor = mySharedPreferences.edit();
15 editor.putString("name", "karl");
16 editor.putString("habit", "sleep");
17 editor.commit();
18 Toast.makeText(this, "数据成功写入SharedPreferences!" ,
19 Toast.LENGTH_LONG).show();
20
21 }
22 public void onClick_ReadData(View view)
23 {
24 SharedPreferences sharedPreferences = getSharedPreferences("test",
25 Activity.MODE_PRIVATE);
26 String name = sharedPreferences.getString("name", "");
27 String habit = sharedPreferences.getString("habit", "");
28
29 Toast.makeText(this, "读取数据如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit,
30 Toast.LENGTH_LONG).show();
31
32 }
33 }
运行结果如下:
同样,如果设置记住密码,自动登录等复选框,也是将用户输入的数据进行保存,保存在xml文件中,再从中进行读取,如果正确,直接进入下一个成功后的界面,当用户下一次进入时,首先判断输入的文本在xml中有没有记录,如果有记录,就直接从xml文件中读取,实现了记住密码的功能。这里不再进行详细阐述。
1:LoginActivity的代码如下:
1 package com.liu.activity;
2
3 import android.app.Activity;
4 import android.content.Context;
5 import android.content.Intent;
6 import android.content.SharedPreferences;
7 import android.content.SharedPreferences.Editor;
8 import android.os.Bundle;
9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.view.Window;
12 import android.widget.Button;
13 import android.widget.CheckBox;
14 import android.widget.CompoundButton;
15 import android.widget.CompoundButton.OnCheckedChangeListener;
16 import android.widget.EditText;
17 import android.widget.ImageButton;
18 import android.widget.Toast;
19
20 public class LoginActivity extends Activity {
21
22 private EditText userName, password;
23 private CheckBox rem_pw, auto_login;
24 private Button btn_login;
25 private ImageButton btnQuit;
26 private String userNameValue,passwordValue;
27 private SharedPreferences sp;
28
29 public void onCreate(Bundle savedInstanceState) {
30 super.onCreate(savedInstanceState);
31
32 //去除标题
33 this.requestWindowFeature(Window.FEATURE_NO_TITLE);
34 setContentView(R.layout.login);
35
36 //获得实例对象
37 sp = this.getSharedPreferences("userInfo", Context.MODE_WORLD_READABLE);
38 userName = (EditText) findViewById(R.id.et_zh);
39 password = (EditText) findViewById(R.id.et_mima);
40 rem_pw = (CheckBox) findViewById(R.id.cb_mima);
41 auto_login = (CheckBox) findViewById(R.id.cb_auto);
42 btn_login = (Button) findViewById(R.id.btn_login);
43 btnQuit = (ImageButton)findViewById(R.id.img_btn);
44
45
46 //判断记住密码多选框的状态
47 if(sp.getBoolean("ISCHECK", false))
48 {
49 //设置默认是记录密码状态
50 rem_pw.setChecked(true);
51 userName.setText(sp.getString("USER_NAME", ""));
52 password.setText(sp.getString("PASSWORD", ""));
53 //判断自动登陆多选框状态
54 if(sp.getBoolean("AUTO_ISCHECK", false))
55 {
56 //设置默认是自动登录状态
57 auto_login.setChecked(true);
58 //跳转界面
59 Intent intent = new Intent(LoginActivity.this,LogoActivity.class);
60 LoginActivity.this.startActivity(intent);
61 }
62 }
63
64 // 登录监听事件 现在默认为用户名为:xuyinghui 密码:123
65 btn_login.setOnClickListener(new OnClickListener() {
66
67 public void onClick(View v) {
68 userNameValue = userName.getText().toString();
69 passwordValue = password.getText().toString();
70
71 if(userNameValue.equals("xuyinghui")&&passwordValue.equals("123"))
72 {
73 Toast.makeText(LoginActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
74 //登录成功和记住密码框为选中状态才保存用户信息
75 if(rem_pw.isChecked())
76 {
77 //记住用户名、密码、
78 Editor editor = sp.edit();
79 editor.putString("USER_NAME", userNameValue);
80 editor.putString("PASSWORD",passwordValue);
81 editor.commit();
82 }
83 //跳转界面
84 Intent intent = new Intent(LoginActivity.this,LogoActivity.class);
85 LoginActivity.this.startActivity(intent);
86 //finish();
87
88 }else{
89
90 Toast.makeText(LoginActivity.this,"用户名或密码错误,请重新登录", Toast.LENGTH_LONG).show();
91 }
92
93 }
94 });
95
96 //监听记住密码多选框按钮事件
97 rem_pw.setOnCheckedChangeListener(new OnCheckedChangeListener() {
98 public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
99 if (rem_pw.isChecked()) {
100
101 System.out.println("记住密码已选中");
102 sp.edit().putBoolean("ISCHECK", true).commit();
103
104 }else {
105
106 System.out.println("记住密码没有选中");
107 sp.edit().putBoolean("ISCHECK", false).commit();
108
109 }
110
111 }
112 });
113
114 //监听自动登录多选框事件
115 auto_login.setOnCheckedChangeListener(new OnCheckedChangeListener() {
116 public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
117 if (auto_login.isChecked()) {
118 System.out.println("自动登录已选中");
119 sp.edit().putBoolean("AUTO_ISCHECK", true).commit();
120
121 } else {
122 System.out.println("自动登录没有选中");
123 sp.edit().putBoolean("AUTO_ISCHECK", false).commit();
124 }
125 }
126 });
127
128 btnQuit.setOnClickListener(new OnClickListener() {
129
130 @Override
131 public void onClick(View v) {
132 finish();
133 }
134 });
135
136 }
137 }
其中在跳转页面时,增加了进度条。可以让用户知道程序还在进行中。避免纠结自己的程序是否终止。
2:页面布局login.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:background="@drawable/login2"
6 android:orientation="vertical" >
7
8 <RelativeLayout
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content" >
11 <ImageButton
12 android:id="@+id/img_btn"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:layout_alignParentRight="true"
16 android:background="@drawable/quit"/>
17
18 <TextView
19 android:id="@+id/tv_zh"
20 android:layout_width="wrap_content"
21 android:layout_height="35dip"
22 android:layout_marginLeft="12dip"
23 android:layout_marginTop="10dip"
24 android:gravity="bottom"
25 android:text="帐号:"
26 android:textColor="#000000"
27 android:textSize="18sp" />
28
29 <EditText
30 android:id="@+id/et_zh"
31 android:layout_width="fill_parent"
32 android:layout_height="40dip"
33 android:layout_below="@id/tv_zh"
34 android:layout_marginLeft="12dip"
35 android:layout_marginRight="10dip" />
36
37 <TextView
38 android:id="@+id/tv_mima"
39 android:layout_width="wrap_content"
40 android:layout_height="35dip"
41 android:layout_below="@id/et_zh"
42 android:layout_marginLeft="12dip"
43 android:layout_marginTop="10dip"
44 android:gravity="bottom"
45 android:text="密码:"
46 android:textColor="#000000"
47 android:textSize="18sp" />
48
49 <EditText
50 android:id="@+id/et_mima"
51 android:layout_width="fill_parent"
52 android:layout_height="40dip"
53 android:layout_below="@id/tv_mima"
54 android:layout_marginLeft="12dip"
55 android:layout_marginRight="10dip"
56 android:maxLines="200"
57 android:password="true"
58 android:scrollHorizontally="true" />
59
60 <CheckBox
61 android:id="@+id/cb_mima"
62 android:layout_width="wrap_content"
63 android:layout_height="wrap_content"
64 android:layout_below="@id/et_mima"
65 android:layout_marginLeft="12dip"
66 android:text="记住密码"
67 android:textColor="#000000" />
68
69 <CheckBox
70 android:id="@+id/cb_auto"
71 android:layout_width="wrap_content"
72 android:layout_height="wrap_content"
73 android:layout_below="@id/cb_mima"
74 android:layout_marginLeft="12dip"
75 android:text="自动登录"
76 android:textColor="#000000" />
77 <Button
78 android:id="@+id/btn_login"
79 android:layout_width="80dip"
80 android:layout_height="40dip"
81 android:layout_below="@id/et_mima"
82 android:layout_alignParentRight="true"
83 android:layout_alignTop="@id/cb_auto"
84 android:layout_marginRight="10dip"
85 android:gravity="center"
86 android:text="登录"
87 android:textColor="#000000"
88 android:textSize="18sp"/>
89
90
91 </RelativeLayout>
92
93
94
95 </LinearLayout>
3:页面显示如下:
4:源码下载请访问:https://github.com/xuyinghuicherish/SharedPreferences