<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; } }