Android数据的存储

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

一、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("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        // [3]开始组拼xml根节点
		sb.append("<smss>");
        // [4]开始组拼xml节点,循环从List里面取数据
		for (Sms sms : smsLists) {
			sb.append("<sms>");
            // [5]开始组拼电话号码节点
			sb.append("<number>");
			sb.append(sms.getNumber());
			sb.append("</number>");
            // [6]开始组拼短信内容节点
			sb.append("<content>");
			sb.append(sms.getContent());
			sb.append("</content>");
            // [7]开始组拼日期节点
			sb.append("<date>");
			sb.append(sms.getDate());
			sb.append("</date>");
			sb.append("</sms>");
		}
		sb.append("</smss>");
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名侦探柯小启

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android数据存储是一种将数据存储在设备上的技术,以便应用程序可以使用它们,无论它们是否在运行时。这使得应用程序可以使用一些简单且安全的存储方法,而无需直接与设备存储硬件进行交互。Android提供了几种不同的数据存储选项,包括: 1. **Shared Preferences**:这是最基本的数据存储方式,它允许应用程序存储和检索键值对数据。这对于小型数据存储需求非常有用,因为它们是本地存储并且对其他应用程序不可见。 2. **Files**:应用程序可以使用文件系统来存储和检索数据。这可以包括文本文件、图像、音频和视频文件等。文件系统存储数据可以在应用程序关闭后保持持久性。 3. **SQLite**:SQLite是一个轻量级的关系型数据库,它可以在设备上作为嵌入式数据库使用。SQLite提供了对数据的结构化查询支持,因此更适合存储大量数据。 4. **Content Providers**:Content Providers允许应用程序之间共享数据。它们使得跨应用程序访问和共享数据成为可能,这对于构建大型应用程序的跨应用程序功能非常有用。 5. **外部存储(如SD卡)**:Android允许应用程序访问设备的外部存储(如SD卡)。这可以用于存储大文件或大型数据集,但需要注意的是,访问外部存储可能需要额外的权限。 在选择适当的存储选项时,需要考虑数据的类型、大小、持久性和安全性。例如,如果数据只需要在应用程序运行时可用,Shared Preferences可能是一个合适的选择。然而,如果需要存储大量结构化数据或大型文件,那么SQLite或外部存储可能更适合。 此外,对于敏感数据(如用户密码或个人信息),建议使用加密来保护这些数据。在Android中,可以使用AES或其他加密算法来实现这一点。 最后,记住在处理存储数据时遵循最佳实践,例如使用适当的错误处理和日志记录,以确保数据的安全性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值