android:XML增删改查
2015-09-14 23:25
435 查看
在项目中会遇到对于XML的增删改查。有一些模块数据需要动态的展示,根据用户偏好,或者用户手动输入的数据显示,我们将这些数据存储在SD卡下,已XML格式保存。
下面是代码:
MainActivity .java
数据类Person.java
工具类:完成xml的增删改查
下面是代码:
MainActivity .java
package com.example.xmltest; import java.util.List; import android.os.Bundle; import android.os.Environment; import android.annotation.SuppressLint; import android.app.Activity; import android.util.Log; import android.view.Menu; @SuppressLint("UseValueOf") public class MainActivity extends Activity { //private static final String TAG = "PersonServiceTest"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); XMLService xmlService=new XMLService(); String path=Environment.getExternalStorageDirectory().toString()+"/person.xml"; /**查询数据 try { List<Person> persons=xmlService.getPersons(path); for(Person person:persons){ Log.i("Test",person.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ /**增加数据 Person p=new Person(11, "bank", 25); try { xmlService.addPerson(p, path); //查看结果 List<Person> persons=xmlService.getPersons(path); for(Person person:persons){ Log.i("Test",person.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ /**删除数据 try { xmlService.deletePerson(32, path); //查看结果 List<Person> persons=xmlService.getPersons(path); for(Person person:persons){ Log.i("Test",person.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ //修改数据 Person p=new Person(11, "bank", 100); try { xmlService.updatePerson(p, path); //查看结果 List<Person> persons=xmlService.getPersons(path); for(Person person:persons){ Log.i("Test",person.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
数据类Person.java
package com.example.xmltest; public class Person { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public Person(){} @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
工具类:完成xml的增删改查
package com.example.xmltest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.os.Environment; import android.util.Xml; public class XMLService { /** * 查询XML文件下的数据 * @param path 文件路径 * @return * @throws Exception */ public List<Person> getPersons(String path) throws Exception{ InputStream xml = new FileInputStream(path); List<Person> persons =null; Person person=null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml, "UTF-8"); int event = pullParser.getEventType(); while(event != XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if("person".equals(pullParser.getName())){ int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } if("name".equals(pullParser.getName())){ String name = pullParser.nextText(); person.setName(name); } if("age".equals(pullParser.getName())){ int age = new Integer(pullParser.nextText()); person.setAge(age); } break; case XmlPullParser.END_TAG: if("person".equals(pullParser.getName())){ persons.add(person); person = null; } break; } event = pullParser.next(); } return persons; } /** * 增加数据 * * @param person * @param path * @throws Exception */ public void addPerson(Person person,String path) throws Exception{ List<Person> persons=null; //1、先解析xml数据 File file=new File(path); try { persons= getPersons(path); } catch (Exception e) { e.printStackTrace(); } //2、添加入新的数据person persons.add(person); //3、生成新的XML file.delete(); NewXML(persons); } /** * 删除数据 * @param id * @param path * @throws Exception */ public void deletePerson(int id,String path) throws Exception{ List<Person> persons=null; //1、先解析xml数据 File file=new File(path); try { persons= getPersons(path); } catch (Exception e) { e.printStackTrace(); } //2、删除person Person p=null; for (Person person:persons) { if(person.getId()==id){ p=person; } } persons.remove(p); //3、生成新的XML file.delete(); NewXML(persons); } /** * 修改数据,传入需要需改的person * @param p * @param path * @throws Exception */ public void updatePerson(Person p,String path) throws Exception{ List<Person> persons=null; //先解析xml数据 File file=new File(path); try { persons= getPersons(path); } catch (Exception e) { e.printStackTrace(); } //修改person Person p1=null; for (Person person:persons) { if(person.getId()==p.getId()){ p1=person; } } persons.remove(p1); persons.add(p); //生成新的XML file.delete(); NewXML(persons); } /** *根据传入的persons,在指定路径下,重新生成XML文件 * @param persons * @param out * @throws Exception */ public void NewXML(List<Person> persons) throws Exception{ File xmlFile = new File(Environment.getExternalStorageDirectory().toString(), "person.xml"); FileOutputStream outStream = new FileOutputStream(xmlFile); XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(outStream, "UTF-8"); serializer.startDocument("UTF-8", true); serializer.startTag(null, "persons"); for(Person person : persons){ serializer.startTag(null, "person"); serializer.attribute(null, "id", person.getId()+""); serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(person.getAge()+""); serializer.endTag(null, "age"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); serializer.endDocument(); outStream.flush(); outStream.close(); } }
相关文章推荐
- Android学习系列(二): 短信发送器
- Android剪切板(ClipboardManager) 复制文本
- Android开发-Activity(二)
- 在android 4.2.2上调试MU609步骤,WCDMA
- Android学习笔记(七)两个Fragment简单跳转示例
- Android API中被忽略的几个函数接口
- Android将"content://"类型的uri转为文件路径
- Android动态加载布局
- 关于android sdk23中的bug
- android的内容提供者范例
- android中数据库sqlite的增删改查
- Android 测试Service的生命周期
- android的sqlite数据库案例
- android studio 的SHA1查看
- Android工程缺少SDK解决方案
- Android中Serializable和Parcelable接口
- android的Manifest.xml文件配置简介
- signForAPK
- 2015-09-14
- android学习之路之接口回调的理解