SharedPreferences保存用户喜好参数
很多时候我们需要对处理的数据进行存储,以供再次访问,这里介绍一种数据存储方式
sharedPreferences对象可以通过上下文对象得到,第一个参数为保存成为的xml文件名称,第二个参数为处理类型。
如上代码,通过SharedPreferences对象获取数据
(1) 要传入的InputStream 可以通过InputStream xml = this.getClass().getClassLoader().getResourceAsStream("baobao.xml")得到
该类的关键方法 1,setOutput() 设置输出的xml 第一个参数为OutputStream 第二个是编码
SharedPreferences 他是一个较轻量级的存储类,以xml文件保存,内存资源占用比较的少。下面介绍用法
1. 存储数据
//@param name 指定xml的文件名
//@param mode
SharedPreferences preferences = context.getSharedPreferences("Pangxiaobao", Context.MODE_PRIVATE);
//编辑器对象
Editor editor = preferences.edit();
editor.putString("name", name);
editor.putInt("age", age);
editor.commit();
sharedPreferences对象可以通过上下文对象得到,第一个参数为保存成为的xml文件名称,第二个参数为处理类型。
通过编辑器对象写入数据,注意最后一定要commit
最终形成的xml文件在
/data/data/PACKAGE_NAME /shared_prefs
目录下
2.获取数据
public Map<String,String> getPreferences(){
Map<String,String> params = new HashMap<String ,String>();
SharedPreferences preferences = context.getSharedPreferences("Pangxiaobao", Context.MODE_PRIVATE);
preferences.getInt("age", 0);
params.put("name", preferences.getString("name", ""));
params.put("age", String.valueOf(preferences.getInt("age", 0)));
return params;
}
如上代码,通过SharedPreferences对象获取数据
get方法的第一个是参数名称,第二个是默认值(如果该参数不存在)
简单的用法就是这样了
附录 pull解析
先附上要解析的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<baobaos>
<baobao id="10">
<name>A</name>
<age>21</age>
</baobao>
<baobao id="20">
<name>B</name>
<age>20</age>
</baobao>
</baobaos>
1 解析xml文件的代码
/**
* 解析xml文件
* @param xml输入方向
* @return
* @throws Exception
*/
public static ArrayList<Baobao> getBaobaos(InputStream xml)throws Exception{
ArrayList<Baobao> Baobaos = null;
Baobao baobao = null;
XmlPullParser pullParser = Xml.newPullParser();//得到pull解析器
pullParser.setInput(xml, "utf-8");//设置要解析的xml文件
while(pullParser.getEventType()!= XmlPullParser.END_DOCUMENT){
switch(pullParser.getEventType()){
case XmlPullParser.START_DOCUMENT:
Baobaos = new ArrayList<Baobao>();
break;
case XmlPullParser.START_TAG:
if("baobao".equals(pullParser.getName())){
int id = new Integer(pullParser.getAttributeValue(0));
baobao.setId(id);
}
if("name".equals(pullParser.getName())){
String name = pullParser.nextText();
baobao.setName(name);
}
if("age".equals(pullParser.getName())){
int age = new Integer(pullParser.getAttributeValue(0));
baobao.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("baobao".equals(pullParser.getName())){
Baobaos.add(baobao);
}
break;
}
pullParser.next();
}
return Baobaos;
}
(1) 要传入的InputStream 可以通过InputStream xml = this.getClass().getClassLoader().getResourceAsStream("baobao.xml")得到
(2)XmlPullParser可以通过Xml类得到
(3)XmlPullParser的关键方法 1,next() 解析下一个节点
2,getEventType() 得到解析的节点的类型
XmlPullParser.START_DOCUMENT文档起始节点
XmlPullParser.START_TAG元素起始节点
XmlPullParser.END_TAG元素结束节点
XmlPullParser.END_DOCUMENT文档结束节点
3,
nextText()得到文本节点 如name的值 A
4,getAttributeValue(int index) 得到属性的值,index表示第几个属性(0开始)
5,setInput(InputStream xml,编码方式)设置读取的xml文件
6,getName()得到当前解析的节点的值
2.保存数据到xml文件的方法
通过XmlSerializer类来实现
public static void saveToXml(ArrayList<Baobao> Baobaos,OutputStream writer) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "baobaos");
for(Baobao baobao : Baobaos){
serializer.startTag(null, "baobao");
serializer.attribute(null, "id", baobao.getId().toString());
serializer.startTag(null, "name");
serializer.text(baobao.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(baobao.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "baobao");
}
serializer.endTag(null, "baobaos");
serializer.endDocument();
writer.flush();
writer.close();
}
该类的关键方法 1,setOutput() 设置输出的xml 第一个参数为OutputStream 第二个是编码
2,startDocument() 写上文档起始节点 第一个参数是编码 ,第二个参数忘记了。。
3,startTag() endTag()写上元素起始节点与结束节点 第一个参数是命民空间 第二个蚕食是节点的名称
4,text() 写上文本节点的值
5,attribute() 第一个参数为命名空间 第二个参数属性的名称 第三个参数是属性的值