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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值