项目开发,我的名字不可能这么可爱——使用XML和Sqlite处理数据
来源:互联网 发布:centos一键搭建squid 编辑:程序博客网 时间:2024/04/28 23:20
既然是要做一个人物的信息卡包,那就要用到人物信息数据。为了方便查询和添加,应用中打算采用Sqlite来保存数据。最初的一部分原始数据用XML保存在assets中。既然如此,这篇文章就是关于XML文件的解析和Sqlite的数据库的使用了。
1、XML文件的解析
首先是自己通过文本编辑器准备了一份人物信息的XML文件,再通过代码解析。XML文件如下:
<?xml version="1.0" encoding="utf-8"?><persons> <person> <name>真红</name> <introduce>是蔷薇少女中的第五人偶,第一个与樱田纯缔结契约的蔷薇少女。拥有透彻如宝石蓝的眼睛与末端呈螺旋状的金色双马尾,身着深红色维多利亚风与拿破仑式结合的服装。</introduce> <label>蔷薇少女</label> </person> <person> <name>水银灯</name> <introduce>蔷薇少女第一人偶,性格孤傲,与其它人偶不和,战斗中经常展现出冷酷无情的一面。相当敢爱敢恨,为了自己所爱的人可以不惜一切。</introduce> <label>蔷薇少女</label> </person> <person> <name>雏梅</name> <introduce>雏莓是蔷薇少女中的第六人偶,可爱十足,天真烂漫,心地善良,人工精灵是莓铃(ベリーベル),代表色为粉红色。</introduce> <label>蔷薇少女</label> </person> <person> <name>翠星石</name> <introduce>翠星石是蔷薇少女中的第三人偶。人工精灵是水之梦(甜蜜梦境)。左眼是翡翠绿,右眼是宝石红,穿着巴伐利亚风格的公主裙。</introduce> <label>蔷薇少女</label> </person> <person> <name>苍星石</name> <introduce>苍星石是蔷薇少女中第四位人偶,人工精灵是琅碧卡Lempicka)。左眼为宝石红,右眼为翡翠绿,穿着巴伐利亚风格的王子装。</introduce> <label>蔷薇少女</label> </person> <person> <name>金丝雀</name> <introduce>金丝雀是蔷薇少女中的第二人偶。擅长使用小提琴进行波音攻击,因此十分擅长小提琴(可变幻为飞行西洋伞),人工精灵是拨弦(ピチカート)。</introduce> <label>蔷薇少女</label> </person> <person> <name>蔷薇水晶</name> <introduce>蔷薇水晶是由槐制作的人偶。最大的特色是眼睛上的紫色蔷薇造型的眼罩,有着异于其他人偶的衣物造型风格。</introduce> <label>蔷薇少女</label> </person> <person> <name>雪华绮晶</name> <introduce>雪华绮晶蔷薇少女第七人偶,代表色是白色(白蔷薇)。</introduce> <label>蔷薇少女</label> </person></persons>XML文件实际上是由一系列的标签组成的。首先在最外层的<persons>和</persons>是XML文件开始的标签,<person>和</person>标签对应了一个具体的对象,其里面的<name>、<introduce>等标签则对应了对象的每个属性。说到这里,XML文件的解析应该就非常清楚了,实际的解析过程如下:
public List<Person> parse(InputStream is) throws Exception { List<Person> persons = null; Person person = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "UTF-8"); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(parser.getName())) { person = new Person(); } else if ("name".equals(parser.getName())) { eventType = parser.next(); person.setName(parser.getText()); } else if("introduce".equals(parser.getName())) { eventType = parser.next(); person.setIntroduce(parser.getText()); } else if ("label".equals(parser.getName())) { eventType = parser.next(); person.setLabel(parser.getText()); } break; case XmlPullParser.END_TAG: if ("person".equals(parser.getName())) { persons.add(person); person = null; } break; } eventType = parser.next(); } return persons;}这里传入的InputStrem是用来读入XML文件的,本应用中将XML文件放在assets中,因此可以使用getAssets().open("persons.xml")方法来得到一个InputStream。首先通过Xml.newPullParser()获取一个xml解析器,通过该解析器去依次获取XML文件的每个标签,直到读取到文件结束标签为止。
2、Sqlite数据库的使用
首先创建一个PersonDBHelper类,用来创建和更新数据库:
public class PersonDBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "person.db"; private static final int VERSION = 1; private static final String SQL_CREATE = "create table person (" + "name text, introduce text, label text)"; private static final String SQL_DELETE = "drop table person"; public PersonDBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DELETE); db.execSQL(SQL_CREATE); }}再创建一个DBOperator类用来实现数据库的增、删、改、查操作:
public class DBOperator { private static final String SQL_INSERT = "insert into person (name, introduce, label) values (?, ?, ?)"; private static final String SQL_DELETE = "delete from person where name = ?"; private static final String SQL_UPDATE = "update person set label = ? where person = ?"; private static final String SQL_SELECT = "select * from person where label = ?"; private PersonDBHelper dbHelper; public DBOperator(Context context) { dbHelper = new PersonDBHelper(context); } public void insert(Person person) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL(SQL_INSERT, new Object[] { person.getName(), person.getIntroduce(), person.getLabel() }); db.close(); } public void delete(String name) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL(SQL_DELETE, new Object[] { name }); db.close(); } public void update(String label, String name) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL(SQL_UPDATE, new Object[]{ label, name }); db.close(); } public List<Person> select(String label) { ArrayList<Person> persons = new ArrayList<>(); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery(SQL_SELECT, new String[]{ label }); int nameCol = cursor.getColumnIndex("name"); int introduceCol = cursor.getColumnIndex("introduce"); while (cursor.moveToNext()) { String name = cursor.getString(nameCol); String introduce = cursor.getString(introduceCol); Person person = new Person(name, introduce, label); persons.add(person); } cursor.close(); db.close(); return persons; } public boolean isRecordEmpty(String label) { List<Person> persons = select(label); if (persons == null) { return true; } return false; }}这里用到的主要都是SQL语法的一些知识,大家可以参考着SQL语句来写。当然,Android也提供了封装好的方法,大家也可以试着使用。
呃,突然就写完了(没写够啊!喂!)。好吧,这个应用果然够简单的:)。下一篇开始介绍material design布局。
0 0
- 项目开发,我的名字不可能这么可爱——使用XML和Sqlite处理数据
- 项目开发,我的名字不可能这么可爱——开篇
- 这么可爱,我都想养一只了
- 安卓开发SQlite使用执行SQL语句一些简单的处理——1.创建数据库,表和添加数据
- WebGL的原生API不可能那么可爱
- 安卓开发SQlite使用执行SQL语句一些简单的处理——2.查询数据库的数据
- 使用SQLite数据库保存和处理数据
- 软件开发——不可能完成的任务?(收藏)
- Lazarus开发使用SQLite的WinCE项目
- Lazarus开发使用SQLite的WinCE项目
- 我的可爱老公
- 我的可爱老公
- 我可爱的舍友
- 管理不可能管理的项目
- Swift 中使用 SQLite——修改和删除数据
- Swift 中使用 SQLite——修改和删除数据
- 使用XML和XMLList类处理XML数据
- FishC笔记—32 讲 异常处理:你不可能总是对的
- poj 2002 hash
- 寒门再难出贵子
- UIScrollView的简单介绍
- UML图总结
- 关于spring的@resource注解的字段注入和setter注入的区别
- 项目开发,我的名字不可能这么可爱——使用XML和Sqlite处理数据
- 项目实训--物流管理项目之客户服务中心模块
- MFC的oncreate函数作用
- LightOJ 1148 - Mad Counting【水题+规律】
- 2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest I题:Illegal or Not? [暴力题]
- (这是水题)pat-1013
- 安卓编程问题及解决方法汇总
- Raspberry Pi 初始化
- 记事本打开文件乱码的问题