Android后台获取服务器之pull解析

Android附带了一个pull解析器,pull解析器的运行方式与sax类似,都是基于事件模式。
pull提供了开始元素和结束元素,当某个元素开始时,我们可以调用parser.nextText从xml文档中提取所有字符数据。当一个文档结束时,自动生成EndDocument事件。
读取到xml的结束返回END_DOCUMENT;
读取到xml的结束返回START_TAG;
读取到xml的结束返回END_TAG;
读取到xml的结束返回TEXT;

PULL常用的接口和类
XmlPullParser:提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了XML信息集的序列。

具体代码:

     @Override
        protected Object doInBackground(Object[] objects) {

            final List fqs=new ArrayList<>();

            //获取网络数据
            //01.定义获取网络的数据的路径
            String path=getString(R.string.server_name)+"fqActiongetXML.action";
            try {
                //02.实例化Url
                URL url=new URL(path);
                //03.获取连接对象
                HttpURLConnection conn= (HttpURLConnection) url.openConnection();
                //04.设置请求方式
                conn.setRequestMethod("GET");
                //05.设置请求连接超时的时间
                conn.setConnectTimeout(5000);

                //06.获取响应码
                int code=conn.getResponseCode();
                if(code==200){
                    //07.获取返回过来的数据(XML)
                    InputStream is =conn.getInputStream();
                    //08.测试(删除-注释)
                    //缓冲字符流
                    String str=null;
// BufferedReader br=new BufferedReader(new InputStreamReader(is));
// while((str=br.readLine())!=null){
// Log.i("test",str);
// }

                    try {
                        //03.使用PULL解析
                        XmlPullParser pullParser=Xml.newPullParser();
                        pullParser.setInput(is,"UTF-8");
                        int type=pullParser.getEventType();

                        while(type!=XmlPullParser.END_DOCUMENT){
                            switch (type) {
                                case XmlPullParser.START_TAG:
                                    //获取开始标签的名字
                                    String startTagName=pullParser.getName();
                                    if("fq".equals(startTagName)){
                                        fq1 = new FQ();
                                        String name=pullParser.getAttributeValue(0);
                                        fq1.setName(name);
                                    }else if("content".equals(startTagName)){
                                       String content= pullParser.nextText();
                                        fq1.setContent(content);
                                    }else if("time".equals(startTagName)){
                                        String time= pullParser.nextText();
                                        fq1.setTime(time);
                                    }
                                    break;
                                case XmlPullParser.END_TAG:
                                    //获取结束标签的名字
                                    String endTagName=pullParser.getName();
                                    if("fq".equals(endTagName)){
                                        fqs.add(fq1);
                                    }
                                    break;
                            }
                            type=pullParser.next();
                        }
                    } catch (XmlPullParserException e) {
                        e.printStackTrace();
                    }


                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return fqs;
        }

你可能感兴趣的:(Android后台获取服务器之pull解析)