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<FQ> 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;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值