用AsyncHttpClient访问xml页面

来源:互联网 发布:网络技术开发经营范围 编辑:程序博客网 时间:2024/05/22 02:06

使用开源框库AsyncHttpClient

1、在app的build.gradle中的dependencies中添加:

compile 'net.callumtaylor:asynchttpclient:1.5'

2、如果出现错误的话,有几种情况,一种是
这里写图片描述
这种情况,在app的build.gradle中添加:

    packagingOptions {        exclude 'META-INF/LICENSE.txt'        exclude 'META-INF/NOTICE.txt'    }

如果是
这里写图片描述

这种属于本机没有安装sdk 19,去sdk Manager去下载

3、AsyncHttpClient本身有访问图片、json等的封装好的方法,访问xml页面的话等同于访问一个文本界面,使用StringResponseHandlergetContent()返回的就是这个xml文本

访问及xml解析

访问一个天气预报的界面,Log打印相关信息
北京天气预报

public class MainActivity extends AppCompatActivity {    private String response;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        AsyncHttpClient asyncHttpClient = new AsyncHttpClient("http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100");        asyncHttpClient.get(new StringResponseHandler() {            @Override            public void onSuccess() {                response = getContent();            }        });        findViewById(R.id.btnPull).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                parseXmlWithPull(response);            }        });        findViewById(R.id.btnSAX).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                parseXmlWithSAX(response);            }        });    }    /**     * pull解析     * @param response     */    private void parseXmlWithPull(String response) {        try {            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();            XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();            xmlPullParser.setInput(new StringReader(response));            int eventType = xmlPullParser.getEventType();            String date = "";            String high = "";            String low = "";            String type = "";            String fengxiang = "";            String fengli = "";            while (eventType != XmlPullParser.END_DOCUMENT) {                String nodeName = xmlPullParser.getName();                switch (eventType) {                    case XmlPullParser.START_TAG:                        if ("date".equals(nodeName)) {                            date = xmlPullParser.nextText();                        }                        if ("high".equals(nodeName)) {                            high = xmlPullParser.nextText();                        }                        if ("low".equals(nodeName)) {                            low = xmlPullParser.nextText();                        }                        if ("type".equals(nodeName)) {                            type = xmlPullParser.nextText();                        }                        if ("fengxiang".equals(nodeName)) {                            fengxiang = xmlPullParser.nextText();                        }                        if ("fengli".equals(nodeName)) {                            fengli = xmlPullParser.nextText();                        }                        break;                    case XmlPullParser.END_TAG:                        if ("weather".equals(nodeName)) {                            Log.d("jackie", "date:----------------" + date);                            Log.d("jackie", "high:----------------" + high);                            Log.d("jackie", "low:-----------------" + low);                            Log.d("jackie", "type:-----------------" + type);                            Log.d("jackie", "fengxiang:-----------------" + fengxiang);                            Log.d("jackie", "fengli:-----------------" + fengli);                        }                        break;                    default:                        break;                }                eventType = xmlPullParser.next();            }        } catch (XmlPullParserException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * SAX解析,需要用到自定义的WeatherHandler     * @param response     */    private void parseXmlWithSAX(String response) {        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();        try {            XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();            WeatherHandler weatherHandler = new WeatherHandler();            xmlReader.setContentHandler(weatherHandler);            xmlReader.parse(new InputSource(new StringReader(response)));        } catch (SAXException e) {            e.printStackTrace();        } catch (ParserConfigurationException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}
/** * Created by Law on 2015/11/27. */public class WeatherHandler extends DefaultHandler {    private String nodeName;    private StringBuilder date;    private StringBuilder high;    private StringBuilder low;    private StringBuilder type;    private StringBuilder fengxiang;    private StringBuilder fengli;    @Override    public void startDocument() throws SAXException {        date = new StringBuilder();        high = new StringBuilder();        low = new StringBuilder();        type = new StringBuilder();        fengxiang = new StringBuilder();        fengli = new StringBuilder();    }    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        nodeName = localName;    }    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        if (nodeName.equals("date")) {            date.append(ch, start, length);        }        if (nodeName.equals("high")) {            high.append(ch, start, length);        }        if (nodeName.equals("low")) {            low.append(ch, start, length);        }        if (nodeName.equals("type")) {            type.append(ch, start, length);        }        if (nodeName.equals("fengxiang")) {            fengxiang.append(ch, start, length);        }        if (nodeName.equals("fengli")) {            fengli.append(ch, start, length);        }    }    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        if ("weather".equals(localName)) {            Log.d("jackie", "date:----------------" + date.toString().trim());            Log.d("jackie", "high:----------------" + high.toString().trim());            Log.d("jackie", "low:-----------------" + low.toString().trim());            Log.d("jackie", "type:-----------------" + type.toString().trim());            Log.d("jackie", "fengxiang:-----------------" + fengxiang.toString().trim());            Log.d("jackie", "fengli:-----------------" + fengli.toString().trim());            //最后清空StringBuilder            date.setLength(0);            high.setLength(0);            low.setLength(0);            type.setLength(0);            fengxiang.setLength(0);            fengli.setLength(0);        }    }    @Override    public void endDocument() throws SAXException {        super.endDocument();    }}
0 0
原创粉丝点击