• android 生成、pull解析xml文件


    
    
    
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.generatexml.MainActivity" >
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短信备份1"
            android:id="@+id/btn1"
            android:onClick="backupSms1" />
        
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短信备份2"
            android:id="@+id/btn2"
            android:layout_below="@id/btn1"
            android:onClick="backupSms2" />
        
         <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取xml数据"
            android:id="@+id/btn3"
            android:layout_below="@id/btn2"
            android:onClick="getXml" />
         <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_get"
            android:layout_below="@id/btn3"
            android:onClick="getXml" />
             />
    
    </RelativeLayout>
    
    
    
     
    
    
    package com.example.generatexml;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.xmlpull.v1.XmlSerializer;
    
    import android.os.Bundle;
    import android.os.Environment;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Xml;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Toast;
    
    import com.example.generatexml.domain.SmsInfo;
    
    
    public class MainActivity extends ActionBarActivity {
        
        private List<SmsInfo> list;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            list = new ArrayList<SmsInfo>();
            long phone = 1880075555;
            for(int i=0;i<10;i++)
            {
                SmsInfo info = new SmsInfo(i, System.currentTimeMillis(),"<短信内容"+i,phone+i+"",i/2+1);
                list.add(info);
            }
        }
        
        
        public void backupSms1(View v){
            
            try {
                File file = new File(Environment.getExternalStorageDirectory(),"backup1.xml");
                FileOutputStream fos = new FileOutputStream(file);
                
                StringBuffer sb = new StringBuffer();
                
                sb.append("<?xml version="1.0" encoding="utf-8"?>");
                
                sb.append("<smss>");
                
                for(SmsInfo s :list)
                {
                    sb.append("<sms>");
                    
                    sb.append("<body>"+s.getBody()+"</body>");
                    sb.append("<type>"+s.getType()+"</type>");
                    sb.append("<addr>"+s.getAddr()+"</addr>");
                    sb.append("<date>"+s.getDate()+"</date>");
                    
                    sb.append("</sms>");
                    
                }
                
                sb.append("</smss>");
                
                fos.write(sb.toString().getBytes());
                fos.close();
                Toast.makeText(this, "保存成功", 0).show();
            } catch (Exception e) {
                
                e.printStackTrace();
                Toast.makeText(this, "保存失败", 0).show();
            }
            
            
            
        }
        
        public void backupSms2(View v)
        {
            
            try {
                XmlSerializer ser = Xml.newSerializer();
                File file = new File(Environment.getExternalStorageDirectory(),"backup2.xml");
                FileOutputStream os = new FileOutputStream(file);
                ser.setOutput(os, "utf-8");
                
                ser.startDocument("utf-8", true);
                
                ser.startTag(null, "smss");
                
                for(SmsInfo s :list)
                {
                    ser.startTag(null, "sms");
                    
                    ser.attribute(null, "id", s.getId()+"");
                    
                    ser.startTag(null, "body");
                    ser.text(s.getBody());
                    ser.endTag(null, "body");
                    
                    ser.startTag(null, "type");
                    ser.text(s.getType()+"");
                    ser.endTag(null, "type");
                    
                    ser.startTag(null, "addr");
                    ser.text(s.getAddr());
                    ser.endTag(null, "addr");
                    
                    ser.startTag(null, "date");
                    ser.text(s.getDate()+"");
                    ser.endTag(null, "date");
                    
                    ser.endTag(null, "sms");
                    
                }
                
                ser.endTag(null, "smss");
                
                ser.endDocument();
                
                os.close();
                
                Toast.makeText(this, "保存成功", 0).show();
                
            } catch(Exception e) {
                
                e.printStackTrace();
                Toast.makeText(this, "保存失败", 0).show();
            }
        }
    
    
    
    }

    //解析xml文件
    public void getXml(View v) { TextView tv = (TextView)this.findViewById(R.id.tv_get); try { InputStream is = MainActivity.this.getClassLoader().getResourceAsStream("backup2.xml"); List<SmsInfo> list = ParserXmlService.getSmsInfos(is); StringBuffer sb = new StringBuffer(); for(SmsInfo s:list) { sb.append(s.toString()); } tv.setText(sb.toString()); Toast.makeText(this, sb.toString(), 0).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "xml解析失败", 0).show(); } }
    
    
    
     

    解析xml文件的service代码

    
    
    package com.example.generatexml.service;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.xmlpull.v1.XmlPullParser;
    
    import android.util.Xml;
    
    import com.example.generatexml.domain.SmsInfo;
    
    public class ParserXmlService {
        
        public static List<SmsInfo> getSmsInfos(InputStream is) throws Exception
        {
            
            System.out.println("service");
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(is, "utf-8");
            List<SmsInfo> list = null;
            SmsInfo sms = null;
            
            int type = parser.getEventType();
            
            while(type!=XmlPullParser.END_DOCUMENT)
            {
                
                switch(type)
                {
                    case XmlPullParser.START_TAG:
                        if("smss".equals(parser.getName()))
                        {
                            list = new ArrayList<SmsInfo>();
                        }
                        else if("sms".equals(parser.getName()))
                        {
                            sms = new SmsInfo();
                            String id = parser.getAttributeValue(0);
                            sms.setId(Integer.parseInt(id));
                        }else if("body".equals(parser.getName()))
                        {
                            String body = parser.nextText();
                            sms.setBody(body);
                        }else if("addr".equals(parser.getName()))
                        {
                            String addr = parser.nextText();
                            sms.setAddr(addr);
                        }
                        else if("date".equals(parser.getName()))
                        {
                            String date = parser.nextText();
                            sms.setDate(Long.parseLong(date));
                        }
                        else if("type".equals(parser.getName()))
                        {
                            String infoType = parser.nextText();
                            sms.setDate(Integer.parseInt(infoType));
                        }
                    
                        break;
                    case XmlPullParser.END_TAG:
                        if("sms".equals(parser.getName()))
                        {
                            list.add(sms);
                            sms = null;
                        }
                        break;
                }
                type = parser.next();
            }
            
            return list;
            
        }
    
    }
    
    
    
     
  • 相关阅读:
    爬虫之初试
    [已解决]疑问:关于postgres的to_number()
    随笔
    简单的任意列数均匀布局
    去除VS2010中中文注释下的红色波浪线
    DataTable举例
    DevExpress::XtraBars::BarEditItem获取EditValue值事件
    List<String^>^ 引用空间
    TreeList的VisibleNodesCount,Noes.Count,AllNdoesCount以及焦点节点的删除
    获取工程的exe文件的所在目录
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/3930304.html
Copyright © 2020-2023  润新知