Android内置了PULL解析器的XPP3实现,以及SAX解析器等,可以直接使用PULL或SAX解析
如有如下
Student实体类代码:
1 package cn.csc.bean; 2 3 public class Student { 4 5 private String id; 6 7 private String name; 8 9 private String gender;10 11 private int age;12 13 public String getId() {14 15 return id;16 17 }18 19 public void setId(String id) {20 21 this.id = id;22 23 }24 25 public String getName() {26 27 return name;28 29 }30 31 public void setName(String name) {32 33 this.name = name;34 35 }36 37 public String getGender() {38 39 return gender;40 41 }42 43 public void setGender(String gender) {44 45 this.gender = gender;46 47 }48 49 public int getAge() {50 51 return age;52 53 }54 55 public void setAge(int age) {56 57 this.age = age;58 59 }60 61 62 63 public Student() {64 65 super();66 67 }68 69 public Student(String id, String name, String gender, int age) {70 71 super();72 73 this.id = id;74 75 this.name = name;76 77 this.gender = gender;78 79 this.age = age;80 81 }82 83 @Override84 85 public String toString() {86 87 return "["+id+","+name+","+gender+","+age+"]";88 89 }90 91 }
1 public class 2 3 public static void serialize(Context context, String filename, List<Student> list){ 4 5 try { 6 7 8 9 factory.newSerializer(); 10 11 serializer.setOutput(context.openFileOutput(filename, Context.MODE_PRIVATE), "utf-8"); 12 13 serializer.startDocument("utf-8", true); 14 15 serializer.startTag(null, "students"); 16 17 for(Student s:list){ 18 19 serializer.startTag(null, "student"); 20 21 serializer.attribute(null, "id", s.getId()); 22 23 serializer.startTag(null, "name"); 24 25 serializer.text(s.getName()); 26 27 serializer.endTag(null, "name"); 28 29 serializer.startTag(null, "gender"); 30 31 serializer.text(s.getGender()); 32 33 serializer.endTag(null, "gender"); 34 35 serializer.startTag(null, "age"); 36 37 serializer.text(s.getAge()+""); 38 39 serializer.endTag(null, "age"); 40 41 serializer.endTag(null, "student"); 42 43 } 44 45 serializer.endTag(null, "students"); 46 47 serializer.endDocument(); 48 49 } catch (Exception e) { 50 51 // TODO Auto-generated catch block 52 53 e.printStackTrace(); 54 55 } 56 57 } 58 59 public static List<Student> parse(Context context, String filename){ 60 61 List<Student> list = new ArrayList<Student>(); 62 63 try { 64 65 66 67 factory.newPullParser(); 68 69 parser.setInput(context.openFileInput(filename), "utf-8"); 70 71 Student s = null; 72 73 int eventType = parser.getEventType(); 74 75 while(eventType != 76 77 if(eventType == 78 79 String tag = parser.getName(); 80 81 if(tag.equals("student")){ 82 83 s = new Student(); 84 85 s.setId(parser.getAttributeValue(0)); 86 87 }else if(tag.equals("name")){ 88 89 s.setName(parser.nextText()); 90 91 }else if(tag.equals("gender")){ 92 93 s.setGender(parser.nextText()); 94 95 }else if(tag.equals("age")){ 96 97 s.setAge(Integer.parseInt(parser.nextText())); 98 99 }100 101 }else if(eventType == )){102 103 list.add(s);104 105 }106 107 eventType = parser.next();108 109 }110 111 for(Student stu : list){112 113 Log.i(",stu.toString());114 115 }116 117 } catch (Exception e) {118 119 // TODO Auto-generated catch block120 121 e.printStackTrace();122 123 return null;124 125 }126 127 return list;128 129 }130 131 }
使用Android Juit分别测试这两个方法:
1 public class extends AndroidTestCase { 2 3 public void testSerializer(){ 4 5 List<Student> list = new ArrayList<Student>(); 6 7 for(int i=0; i<20; i++){ 8 9 list.add(new Student(i+"","dqrcsc","male",25));10 11 }12 13 , list);14 15 }16 17 public void testParser(){18 19 );20 21 }22 23 }
运行结果:
images/loading.gif' data-original="http://images0.cnblogs.com/blog2015/693030/201507/100942549862487.png" />
以上代码,除了获取Context上下文对象外,与Java项目中对
实际上,Andoid在android.util包中还提供了一个
这五个静态方法分别简化了PULL解析器、PULL序列化器、SAX解析的操作:
之前通过工厂类实例获取PULL序列化器的操作,可以从:
1 2 3
简化为:
通过工厂类实例获取PULL解析器的操作,也可以从:
1 2 3
简化为:
同样的,SAX解析也简化为直接调用
原标题:android菜鸟学习笔记19
关键词:Android