Android数据存储之SharePreferences简记
前言
之前在项目中有个资料编辑功能,寻找了好久,最终决定使用SharePreferences,可惜当初学的太差,现在只好重新补救,将相关内容整理于此。 资料编辑功能的实现思路:在用户登录时将相关资料从服务器传到客户端保存一份,通过保存的Uid等实现相应的信息发布及资料编辑等该用户的相关操作。
简述
- SharedPreferences是一种轻型的数据存储方式。
- 它的本质是基于XML文件存储key-value键值对数据。
- 通常用来存储一些简单的配置信息。
- 其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
- 实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取Editor对象。
三、通过Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
具体实现代码
publicclass MainActivity extends Activity {
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取SharedPreferences对象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入数据
Editor editor = sp.edit();
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
//返回STRING_KEY的值
Log.d("SP", sp.getString("STRING_KEY", "none"));
//如果NOT_EXIST不存在,则返回值为"none"
Log.d("SP", sp.getString("NOT_EXIST", "none"));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
代码简析
存入数据
字符(串)类型用putString(“KEY”,“Value”)形式。整数类型用putInt(“KEY”,Value)形式. 代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示:
取出数据
使用 sp.getXXX(). sp.getString(“KEY”," “),若存在该值,返回前者,反之返回后者,同时后者属于非必须填写项(当然在你认为一定能取到值的情况下,否则未出现什么不可知异常也说不准),即可写成 sp.getString(“KEY”)。 如上面代码中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个过程中,并无任何异常抛出。 [caption id=”" align=“aligncenter” width=“779”] 查询结果不存在时提示“none”[/caption]
SharedPreferences数据的四种操作模式
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
该代码中,“SP”为所要操作的xml文件名,MODE_PRIVATE为操作模式。
SharedPreferences数据的四种操作模式
- Context.MODE_PRIVATE
- Context.MODE_APPEND
- Context.MODE_WORLD_READABLE
- Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入
SP.xml中的文件
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="STRING_KEY">string</string>
<int name="INT_KEY" value="0"/>
<boolean name="BOOLEAN_KEY" value="true"/>
</map>
2
3
4
5
6
项目代码实例片段
登陆Activity中的代码片段
//获取SharedPreferences对象
Context ctx = LoginActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入数据
Editor ed = sp.edit();
ed.putString("Uname", user.getUname());
ed.putInt("Uid",user.getUid());
ed.putString("Upassword", psd);
ed.putString("Ucolloge",user.getUcolloge());
ed.putInt("Ugrade",user.getUgrade());
ed.putString("Uphone",user.getUphone());
System.err.println("UerUid:"+user.getUid());
ed.putString("Uemail",user.getUemail());
ed.putString("Usex",user.getUsex());
ed.commit();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
资料编辑Activity中的代码片段
//获取SharedPreferences对象
SharedPreferences sharedPreferences= getSharedPreferences("SP", MODE_PRIVATE);
//获取资料
//Android界面
PEusername = (EditText) findViewById(R.id.PEusername);
PEcolloge = (EditText) findViewById(R.id.PEcollege);
PEgrade = (EditText) findViewById(R.id.PEgrade);
PEnumber = (EditText) findViewById(R.id.PEnumber);
PEphone = (EditText) findViewById(R.id.PEphone);
PEemail = (EditText) findViewById(R.id.PEemail);
PEsex = (EditText) findViewById(R.id.PEsex);
//通过getXXX()从xml中取值传入相应的TextView中
PEusername.setText(sharedPreferences.getString("Uname", ""));
PEcolloge.setText(sharedPreferences.getString("Ucolloge", ""));
PEgrade.setText(sharedPreferences.getInt("Ugrade",-1)+"");
PEphone.setText(sharedPreferences.getString("Uphone", ""));
PEemail.setText(sharedPreferences.getString("Uemail", ""));
PEsex.setText(sharedPreferences.getString("Usex", ""));
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
效果截图
参考资料
Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences Android应用开发SharedPreferences存储数据的使用方法
除特别注明外,本站所有文章均为 windcoder 原创,转载请注明出处来自: android-shu-ju-cun-chu-zhi-sharepreferences-jian-ji

来支持博主!
能有心情写Android真好
回复 @恋羽: 嗯哪,主要还是暂时没什么其他事情O(∩_∩)O~
确实很专业,看来偶要努力学习了
回复 @脱倪粥: 嘘,千万不要让那些老人听到,大家一起努力O(∩_∩)O~
:cool: 很专业,表示搞不懂;不过仍然支持技术。
回复 @王语双个人站: 我的能力还是不够,谢谢支持O(∩_∩)O~
今天我正好也学这块了
回复 @蜜汁炒酸奶: :razz: 是啊
回复 @osblog: 缘分啊O(∩_∩)O~