您的位置:首页 > 移动开发 > Android开发

android:XML增删改查

2015-09-14 23:25 435 查看
在项目中会遇到对于XML的增删改查。有一些模块数据需要动态的展示,根据用户偏好,或者用户手动输入的数据显示,我们将这些数据存储在SD卡下,已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();
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: