Andoid 获取网络资源 PullParser(Pull解析xml文件)

来源:互联网 发布:mac图标放大 编辑:程序博客网 时间:2024/05/21 13:04

获取网络资源

  • 因为获取,网络资源,是耗时操作,故此,需要线程来执行。推荐使用,new AsyncTask(异步任务类),或者 new Thread如果需要刷新UI的话还要,增加Handler。

获取,网络资源的步骤

  1. 定义,资源的网址
  2. 建立URI 对象,加载资源
  3. 从URI对象中,取到资源连接
  4. 设置,请求的方式
  5. 设置,请求超时
  6. 通过字节输入流,读取文件

代码

//被 解析的,文件网络路径            String UriPath="http://172.20.10.3:8080/testPullParser.xml";            //定义 uri            URL uri= null;            try {                uri = new URL(UriPath);                //得到网络连接               HttpURLConnection httpURLConnection= (HttpURLConnection) uri.openConnection();                //设置,网络请求方式                httpURLConnection.setRequestMethod("GET");                //设置,请求超时(一旦超过这个时间点,就结束,请求),的时间   单位毫秒                httpURLConnection.setConnectTimeout(6000);                //通过,字节输入流读取,文件                InputStream URlInput=httpURLConnection.getInputStream();                BufferedInputStream bufferedInputStream=new BufferedInputStream(URlInput);                byte[] bytes = new byte[1024];                int len=0;                StringBuffer stringBuffer=new StringBuffer();                while((len=bufferedInputStream.read(bytes))!=-1){                    String news=new String(bytes,0,len);                    stringBuffer.append(news);                }                Log.i("test",stringBuffer.toString());


PullParser

方法 作用 Xml.newPullParser() 建立,xmlPullParser 解析对象 pullParser对象.setInput(网络资源,读取的字节输出流对象,”UTF-8”); 设置,解析的数据源,以及解析的编码 pullParser对象.getEventType(); 节点类型编号,返回的是整型 XmlPullParser.END_DOCUMENT 取,结束节点的编号 XmlPullParser.START_TAG 取,开始标签的编号 XmlPullParser.END_TAG 取,结束标签的编号 pullParser.getAttributeValue(0) 取,标签内的第一个(从零开始,第二个就是1,)属性。 pullParser.getAttributeName(0) 取第一个属性的名字 pullParser.nextText() 取,标签内的值

使用PullParser解析,网络xml(接上面的,网路资源)

//建立,xmlPullParser  解析对象                XmlPullParser pullParser=Xml.newPullParser();                try {                    //设置,解析的数据源,以及解析的编码                    pullParser.setInput(URlInput,"UTF-8");                    //取到第一行,节点类型                    int typeCount=pullParser.getEventType();                    String  pullXmlName=null;                    //当前节点编号,不等于最后一个节点时                    while (typeCount!=XmlPullParser.END_DOCUMENT){                     pullXmlName=pullParser.getName();  //取到,每一个标签的名字                        switch (typeCount){                            case XmlPullParser.START_TAG:  //当是  开始标签时                                //如果,是根标签   我的xml根标签是Test                                if("Test".equals(pullXmlName)){                                    Log.i("test","<"+pullXmlName+">");                                }else if("Stu".equals(pullXmlName)){//当是,子标签时                                    //pullParser.getAttributeValue(0) 取,当前这个,标签的第一个(从零开始,第二个就是1,),属性                                    //pullParser.getAttributeName(0)  取第一个属性的名字                                    Log.i("test","<"+""+pullXmlName+"  "+""+pullParser.getAttributeName(0)+"=”"+pullParser.getAttributeValue(0)+"“>");                                }else if("id".equals(pullXmlName)){                                     //pullParser.nextText(); 取下个标签内的值                                    Log.i("test","<"+pullXmlName+"> "+pullParser.nextText()+"</"+pullXmlName+"> ");                                }                                break;                            case XmlPullParser.END_TAG: //是  结束标签时                                //如果,是根标签   我的xml根标签是Test                                if("Test".equals(pullXmlName)){                                    Log.i("test","</"+pullXmlName+">");                                }else if("Stu".equals(pullXmlName)){//当是,子标签时                                    Log.i("test","</"+pullXmlName+">");                                }else if("id".equals(pullXmlName)){ //当时,子标签内的标签时                                    Log.i("test","</"+pullXmlName+">");                                }                                break;                        }                        //取到,xml文件中的,下一行                        typeCount=pullParser.next();                    }                } catch (XmlPullParserException e) {                    e.printStackTrace();                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (Exception e) {                e.printStackTrace();            }