android学习笔记(5)-SharedPreferences方式保存用户喜好参数(附pull解析Xml文档详解)

来源:互联网 发布:医院管理培训课程网络 编辑:程序博客网 时间:2024/06/05 05:49

SharedPreferences保存用户喜好参数

很多时候我们需要对处理的数据进行存储,以供再次访问,这里介绍一种数据存储方式

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() 第一个参数为命名空间  第二个参数属性的名称 第三个参数是属性的值

原创粉丝点击