XML文件是android上存储数据方式中的一种,根SQLite功能一样强大,但是缺陷就是不能存储太多的内容,个人觉得如果是一次性数据,可以用xml文件来存储,当然如果是boolean,int,以及String类型的一次性数据用SharedPreferences来存储就更为方便了。
三种方式的优缺点:
SQLite功能较为强大,存储的数据量可以很大,但是要有数据库事务的操作,当数据库中表的字段有所该变就要实现更新数据库操作,有时候操作起来相对XML存储麻烦一点;
XML文件存储数据,只需要用outputstream把要存储的数据写到指定路径的XML文件上;然后再使用的时候读取,缺点是它不能存储大量的数据而且去数据的时候也要解析完数据才能获取到想要的数据。
SharedPreferences操作最为简单,它只能存取一次性数据这个特性根XML文件是一样的,但是它写入数据根获取数据都是最简单的,它并不需要像解析XML文件一样把所有的解析完成才能换获取到需要数据,它可以根据关键字以及数据类型获取到数据。
下面说说PULL解析XML文件的流程:
void write(Context context) {
try {
XmlSerializer serializer = Xml.newSerializer();
File file = new File(context.getFilesDir(), "DEMO.xml");
String str = context.getFilesDir() + "";
FileOutputStream os = new FileOutputStream(file);
serializer.setOutput(os, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "text");
serializer.startTag(null, "demo");
serializer.text("123456");
serializer.endTag(null, "demo");
serializer.endTag(null, "text");
Toast.makeText(context, file + "", 0).show();
serializer.endDocument();
os.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
上面的时我写的写入到对应APP根目录下的file文件下的DEMO.XML文件的代码。写入的文法其实有几种,但是上面的这种事最有调理性的,所有掌握是比较好的。
下面的读取的代码:
void read(Context context) {
// try {
try {
XmlPullParser parser = Xml.newPullParser();
File file = new File(context.getFilesDir(), "DEMO.xml");
//Toast.makeText(context, file + "2", 0).show();
FileInputStream is = new FileInputStream(file);
parser.setInput(is, "utf-8");
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("text".equals(parser.getName())) {
}else if ("demo".equals(parser.getName())) {
str = parser.nextText();
tv.setText(str);
Log.d("》》》》》》》》", str);
}
break;
}
type = parser.next();
}
} catch (FileNotFoundException e) {
Toast.makeText(context, "没有找到文件", 0).show();
e.printStackTrace();
} catch (XmlPullParserException e) {
Toast.makeText(context, "XML异常", 0).show();
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(context, "IO异常", 0).show();
e.printStackTrace();
}
大致是根写入相似的,但是有一点是必须要注意的,type = parser.next()这句代码是尤为重要的,循环是否能跳出就看它了。