在网络上传输数据最常用的格式有Json、XML。这里介绍是XML数据的解析之SAX解析,还有一个Pull解析也常用。
SAX解析和Pull解析区别:
sax解析:自动获取下一个节点,直到xml数据结束位置
pull解析:需要手动设置循环,借助next()直到文件结束
private void sendRequestWithOKHTTP() {
new Thread(new Runnable() { //新建子线程用于请求
@Override
public void run() {
try {
OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
Request request=new Request.Builder() //借助Builder构建Request对象
.url("http://10.0.2.2/get_data.xml").build();//指定访问的服务器地址是电脑本地
Response response=client.newCall(request).execute();
//调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
//服务器返回的数据就在response对象里面
String responseData=response.body().string(); //取出数据
/*使用SAX解析*/
parseXMLBySAX(responseData);
}catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
private void parseXMLBySAX(final String XmlData) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
//SAXParserFactory.newInstance()获取SAXParserFactory实例
SAXParserFactory factory=SAXParserFactory.newInstance();
//借助SAXParserFactory获取XMLReader
XMLReader xmlReader=factory.newSAXParser().getXMLReader();
//创建刚新建的类XMLHandler对象
XMLHandler xmlHandler=new XMLHandler();
//将新类XMLHandler对象,通过放到XMLReader中
xmlReader.setContentHandler(xmlHandler);
//调用XMLReader的parse() 就可以自动解析
xmlReader.parse(new InputSource(new StringReader(XmlData)));
}catch (Exception e){
e.printStackTrace();
}
}
});
}