Android数据的存储

目录

    • 小朋友,你是不是有很多问号???
      • 一、SharedPreferences的应用(重要)
        • 1、获取sp的实例
        • 2、获取编辑器
        • 3、存数据
        • 4、提交数据
        • 5、回显数据
      • 二、生成xml的第一种方式(不是authority用法)
        • 1、创建sb对象
        • 2、开始组拼xml
        • 3、保存数据
      • 三、生成xml的第二种方式(authority方法)
        • 1、获取XmlSerializer类的实例,通过Xml这个工具类去获取
        • 2、设置XmlSerializer序列化器的参数
        • 3、开始写xml文档
      • 四、Xml的解析
        • 1、声明一个pull解析器
        • 2、初始化解析器,设置解析哪个流,用什么编码
        • 3、获取解析的文档的事件类型
        • 4、具体判断一下,解析到的是哪个标签
        • 5、补充说明的东东
  • @CopyRight名侦探柯小启

小朋友,你是不是有很多问号???

一、SharedPreferences的应用(重要)

1、获取sp的实例

/*** name 会帮助我们生成一个html文件* mode 模式*/
SharedPreferences sp;  //可将其定义为成员变量 private SharedPreferences sp;
sp = getSharedPreferences("config", 0);

2、获取编辑器

Editor edit = sp.edit();

3、存数据

//各种类型Int,String,Boolean,Float,Long等
edit.putString("name", name);
edit.putString("pwd", pwd);
edit.putInt("number", number);

4、提交数据

edit.commit();

5、回显数据

//在生成的xml文件中读取用户保存密码的文件,回显
/*** key 与set保持一致* defValue 默认值  ""空字符串*/
//提取数据所用的类型要和第三步骤存储保持一致
String name = sp.getString("name", "");
String pwd2 = sp.getString("pwd", "");

二、生成xml的第一种方式(不是authority用法)

1、创建sb对象

StringBuffer sb = new StringBuffer();

2、开始组拼xml

//[1]组拼xml文件头 \" 为转义
sb.append("");// [3]开始组拼xml根节点sb.append("");// [4]开始组拼xml节点,循环从List里面取数据for (Sms sms : smsLists) {sb.append("");// [5]开始组拼电话号码节点sb.append("");sb.append(sms.getNumber());sb.append("");// [6]开始组拼短信内容节点sb.append("");sb.append(sms.getContent());sb.append("");// [7]开始组拼日期节点sb.append("");sb.append(sms.getDate());sb.append("");sb.append("");}sb.append("");

3、保存数据

/*getCacheDir();getFilesDir();Environment.getExternalStorageDirectory()
其中本例中还需配置权限:WRITE_EXTERNAL_STORAGE*/
File file = new File(Environment.getExternalStorageDirectory(),"xx.xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());//sb
fos.close();

三、生成xml的第二种方式(authority方法)

1、获取XmlSerializer类的实例,通过Xml这个工具类去获取

XmlSerializer serializer = Xml.newSerializer();		//XmlSerializer为接口

2、设置XmlSerializer序列化器的参数

/* os:流* encoding:编码方式*/serializer.setOutput(fos, "utf-8");

3、开始写xml文档

//[1]写xml文档的开头
/* encoding:编码方式* standalone:生成的xml是否独立*/
serializer.startDocument("utf-8", true);
//[2]开始写xml文档的根节点
/* namespace:命名空间* name:节点名*/
serializer.startTag(null, "sms");
//[3]循环写xml节点
for (Sms sms : smsLists) {
serializer.startTag(null, "sms");serializer.startTag(null, "number");	
serializer.text(sms.getNumber());
serializer.endTag(null, "number");serializer.startTag(null, "content");
serializer.text(sms.getContent());
serializer.endTag(null, "content");serializer.startTag(null, "date");		
serializer.text(sms.getDate());
serializer.endTag(null, "date");serializer.endTag(null, "sms");
}
serializer.endTag(null, "sms");
serializer.endDocument();//关闭刷新
fos.close();//关闭流

四、Xml的解析

  • xml的数据来源于服务器,服务器的开发人员通过服务器的技术把数据准备一个xml返回给客户端
  • 服务器是以流的形式把数据返回的
  • 对应Android的开发人员做xml解析,把我们关心的数据取出来就可以了

1、声明一个pull解析器

XmlPullParser parser = Xml.newPullParser();		//XmlPullParser为接口

2、初始化解析器,设置解析哪个流,用什么编码

parser.setInput(in, "utf-8");

3、获取解析的文档的事件类型

int type = parser.getEventType();

4、具体判断一下,解析到的是哪个标签

while (type != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_TAG://解析开始标签//具体判断一下,解析到的是哪个开始标签if("weather".equals(parser.getName())){//创建一个集合对象weatherLists = new ArrayList<WeatherInfo>();}else if("channel".equals(parser.getName())){//创建WeatherInfo对象weatherInfo = new WeatherInfo();//获取id值String id = parser.getAttributeValue(0);weatherInfo.setId(id);}else if("city".equals(parser.getName())){//获取city数据String city = parser.nextText();weatherInfo.setCity(city);}else if("wea".equals(parser.getName())){//获取wea数据String wea = parser.nextText();weatherInfo.setWea(wea);}else if("temp".equals(parser.getName())){//获取temp数据String temp = parser.nextText();weatherInfo.setTemp(temp);}else if("wind".equals(parser.getName())){//获取wind数据String wind = parser.nextText();weatherInfo.setWind(wind);}else if("info".equals(parser.getName())){//获取info数据String info = parser.nextText();weatherInfo.setInfo(info);}break;case XmlPullParser.END_TAG://解析结束标签//具体判断一下,解析到的是哪个结束标签if("channel".equals(parser.getName())){//把javaBean对象存到集合中weatherLists.add(weatherInfo);}break;}//继续向下解析type = parser.next();}

5、补充说明的东东

<?xml version="1.0" encoding="utf-8"?>
<weather>
<channel id='1'><city>池州</city><wea>下雨</wea><temp>20</temp><wind>3</wind><info>请穿个长袖</info>
</channel>
</weather>
/*
上下对应着看*/
public static final int START_DOCUMENT = 0;         
public static final int END_DOCUMENT = 1;          
public static final int START_TAG = 2;              
public static final int END_TAG = 3;
public static final int TEXT = 4;
parser.getName();  //获取<>中的内容
parser.next();  //指向下一个节点
parser.nextText();  //获取文本内容

@CopyRight名侦探柯小启


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部