Android-SAX解析XML文件(http访问取回服务器XML)

来源:互联网 发布:中国产业经济数据库 编辑:程序博客网 时间:2024/04/30 07:42

本来打算之后好好写

由于最近Debug消耗了大量意志 所以写下一篇宣泄一下

记住一个坑爹的问题: 访问internet权限一定要加啊!!!我看书说的要注意

前几次敲还记得加,但是这次忘了!坑爹啊!Debug了两个多小时啊!!!

我还以为XML出问题了或HTTP访问返回的对象出问题了 一直抛出异常XML文件无可找到的元素 no element found!有木有!!!??

 <uses-permission android:name="android.permission.INTERNET"/>



开始正题

DOM PULL 都可以解析 但是SAX可以边加载边解析 

package com.john.xmlreader;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;//设计模式中采用Default接口实现 无需实现接口的所有方法public class MyContentHandler extends DefaultHandler{String hisname,address,money,sex,status;String tagName;public void startDocument() throws SAXException{System.out.println(".....begin.........");}public void endDocument() throws SAXException{System.out.println("......start........");}//开始解析标签    namespace为该标签的命名空间 localname为该标签无前缀的名字 qname为有前缀的名字 attr为其属性public void startElement(String namespaceURI,String localName,String qName,Attributes attr)throws SAXException{//System.out.println("qName------>"+qName);tagName=localName;//读取标签信息 遍历attri 将键值对取出打印if(localName.equals("worker"))    {for(int i=0;i<attr.getLength();i++){ System.out.println(attr.getLocalName(i)+"="+attr.getValue(i));}}}public void endElement(String namespaceURI,String localName,String qName)throws SAXException{tagName="";if(localName.equals("worker")){this.printoutXML();}}public void characters(char[] ch,int start ,int length)throws SAXException{if(tagName.equals("name")){hisname=new String(ch,start,length);}else if(tagName.equals("sex")){sex=new String(ch,start,length);}else if(tagName.equals("status")){status=new String(ch,start,length);}else if (tagName.equals("address")){address=new String(ch,start,length);}else if (tagName.equals("money")){money=new String(ch,start,length);}}private void printoutXML(){System.out.println("name:"+hisname);System.out.println("sex:"+sex);System.out.println("status:"+status);System.out.println("address:"+address);System.out.println("money:"+money);}}
http读取器

ackage com.john.utils_download;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.util.Log;//定义HttpDownLoader类 返回下载文件内容public class HttpDownLoader {//定义URL负责传入Http地址private URL url=null;//构造函数不多说  public String download(String urlStr)   {//StringBuffer处理字符的容器StringBuffer sb= new StringBuffer();String line=null;//BufferedReader处理流对象的容器BufferedReader buffer=null;try {//通用HttpURL处理过程//定义一个URL    url =new URL(urlStr);    //创建HttpURLConnection,使用url的.openConnection()方法建立连接    HttpURLConnection urlConn =(HttpURLConnection)url.openConnection();             Log.d("UrlConn", "NoBug");    //BufferedReader很屌,装饰者修饰方式 getInputStream()获得字节流,InputStreamReader()获得字符流,最后BufferedReader对象容器进行操作    buffer=new BufferedReader (new InputStreamReader(urlConn.getInputStream()));    //通过bufferedReader的readLine()方法 进行朱行读取 放到StringBuffer容器中进行操作    while ((line=buffer.readLine())!=null)    {    sb.append(line);    }}catch (Exception e){e.printStackTrace();}finally {//记得擦屁股哦try{buffer.close();}catch (Exception e){e.printStackTrace();}}//StringBuffer.toString()返回Stringreturn sb.toString(); }      //下载文件          public int DownFile (String urlStr,String path,String fileName)      {          //创造输入流对象         InputStream  inputStream =null;        try{          //用文件工具类对象         FileUtils fileUtils=new FileUtils();         //如果存在返回1         if(fileUtils.isFileExist(path+fileName))         {return 1;}         else{         inputStream =getInputStreamFromUrl(urlStr);             File resultFile =fileUtils.write2SDFromInput(path, fileName, inputStream);         if(resultFile==null)         {return -1;}             }             }         catch (Exception e)         {         e.printStackTrace();         return -1;         }         finally{         try         {inputStream.close();}         catch (Exception e)         { e.printStackTrace();}              }         return 0;      }      //处理URL         public InputStream getInputStreamFromUrl(String UrlStr)              throws MalformedURLException ,IOException              {            url=new URL(UrlStr);               HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();               InputStream inputStream =urlConn.getInputStream();               return inputStream;                       }                    }


下载工具包

package com.john.utils_download;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.os.Environment;//文件存储类public class FileUtils {//成员变量定义文件存储路径private String SDPATH;//获取文件存储路径public String getSDPATH(){return SDPATH;}//构造函数生成文件路径public FileUtils(){SDPATH=Environment.getExternalStorageDirectory()+"/";}//生成文件public File createSDFile(String fileName) throws IOException{File file =new File(SDPATH+fileName);file.createNewFile();return file;}//生成文件目录public File createSDDir(String dirName){File dir=new File(SDPATH+dirName);dir.mkdirs();return dir;}    //判断文件是否已存在public boolean isFileExist(String fileName){File file =new File(SDPATH+fileName);return file.exists();}//将生成的文件写进SDCARDpublic File write2SDFromInput(String path,String fileName,InputStream input){File file =null;OutputStream output =null;try {createSDDir(path);file =createSDFile(path + fileName);//生成输出流对象output =new FileOutputStream(file);//以4M写入byte buffer[]=new byte [4*1024];while((input.read(buffer))!=-1){output.write(buffer);}output.flush();}//记得擦屁股哦!catch(Exception e){e.printStackTrace();}finally{try{output.close();}catch(Exception e){ e.printStackTrace();}}return file;}}




0 0
原创粉丝点击