日期:2014-05-16  浏览次数:20668 次

传智播客--Pull解析XML文件,SharedPreferences,SQLite数据库
转载:http://blog.csdn.net/getclass/archive/2010/03/01/5336832.aspx
================================================================================
随着我们学习的深入,这几天学习的内容越来越精彩了.作为应用开发,我们不可避免的得对数据进行操作.Android就为我们提供了很多种,存放数据和读 取数据的方法.在开发中,减少开发周期提高系统的健壮行.
今天我们就学习Android系统中使用对XML解析的技术Pull.和大大方便我们存 储和读取软件参数的类SharedPreferences.还有系统中提供的嵌入式关系型数据库SQLite的使用和相关操作.

1.使用Pull解析XML文件
这 个是Android系统中使用的方法.推荐使用.
1)读取使用到的 主要方法:
得到一个解析器:XmlPullParser parser = Xml.newPullParser();
传 进一个输入流:parser.setInput(inStream, "UTF-8");
得到事件类 型:parser.getEventType();
判断是否是文件结尾:XmlPullParser.END_DOCUMENT
判断是否 是文件开始:XmlPullParser.START_DOCUMENT:
判断是否是标签开始:XmlPullParser.START_TAG
判 断是否是标签结束:XmlPullParser.END_TAG   
将指针往下推:parser.next();
2)写入使用到的主要方法:
初始化工具 类:XmlSerializer serializer = Xml.newSerializer();
传入输入 流:serializer.setOutput(writer);
对文档进行相关设 置:serializer.startDocument("UTF-8", true);
文档开 始:serializer.startTag("", "persons");
设置标签相关属 性:serializer.attribute("", "id", String.valueOf(person.getId()));
设置文 本信息:serializer.text(String.valueOf(person.getAge()));
设置标签结 束:serializer.endTag("", "age");
设置文档结束:serializer.endDocument();

2.使用SharedPreferences 进行数据存储
1)写出参数:
对工具类初始化:SharedPreferences sharedPreferences = getSharedPreferences("itcast",Context.MODE_PRIVATE);
获取编辑器:Editor editor = sharedPreferences.edit()
设置相关参数:editor.putString("name", " 传智播客 ");
提交修改:editor.commit();
2)读取参数:
String name = sharedPreferences.getString("name", "");
总结:
--特别适合用于保存软件配置参数
--实际也是用xml文件存放数据
--文件存放在 /data/data/<package name>/shared_prefs 目录下
--不要忘记提交,否 则不生效.
--读取的时候,要主要在创建的时候是否给了读取的权限.
--如果 preference 中不存在该 key ,将返回缺省值

3.SQLite 数据库存储数据
1)SQLiteOpenHelper 通过继承这个类,复写下面两个方法对数据库进行版本的控制.
如果程序第一次执行,不存在数据库,执行这个方法创建数据库:onCreate()
如 果数据库存在或存在的数据库版本低于创建版本,执行这个方法更新数据库:onUpgrade()
将数据库以写入方式打开,如果满了,报 错:getWritableDatabase()
将数据库以读写方式打开,如果满了,只读:getReadableDatabase()
2)操作数据库
例如:
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(' 传智播客 ', 4)");
db.close();
-执行SQL语句,可以增删改:db.execSQL("insert into person(name, age) values(?,?)", new Object[]{" 传智播客 ", 4});
-执行SQL语句, 可以进行查询:db.rawQuery("select * from person where name like ? and age=?", new String[]{"% 传智 %", "4"});
-插入:db.insert(“person”, null, values);
- 删除:db.delete("person", "personid<?", new String[]{"2"});
-更 新:db.update("person", values, "personid=?", new String[]{"1"});
-查 询:db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"% 传智 %"}, null, null,
"personid desc", "1,2");
3)事务操作
-开启事 物:db.beginTransaction();
-调用此方法会在执行到 endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
-由事务的标志决定是提交事务,还是回滚事务:db.endTransaction()
总结:
--这个是嵌入式关系型数据库.
--什么类型存 什么数据都行,弱数据类型的数据库.
--定义为INTEGER PRIMARY KEY的字段只能存储64位整数
--在执行onUpgrade() 方法更新数据库时,要注意对原来数据的备份
--对数据库的操作是单用户的,所以推荐不关闭数据库,提高效率.