你的位置:首页 > 操作系统

[操作系统]android菜鸟学习笔记19


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 }

运行结果:

 

以上代码,除了获取Context上下文对象外,与Java项目中对

实际上,Andoid在android.util包中还提供了一个

 

这五个静态方法分别简化了PULL解析器、PULL序列化器、SAX解析的操作:

之前通过工厂类实例获取PULL序列化器的操作,可以从:

1  2 3 

简化为:


 

通过工厂类实例获取PULL解析器的操作,也可以从:

1  2 3 

简化为:


 

同样的,SAX解析也简化为直接调用