全栈工程师开发手册 (作者:栾鹏)
安卓网络操作全解。
发起请求,解析xml响应流
//发起一个请求
private void connect(String urlpath) {
//启动一个网络数据流
try {
URL url = new URL(urlpath);
//创建新的HTTP URL连接
URLConnection connection = url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection)connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream in = httpConnection.getInputStream();
processStream(in);
}
}
catch (MalformedURLException e) {
Log.d("网络操作", "Malformed URL Exception.", e);
}
catch (IOException e) {
Log.d("网络操作", "IO Exception.", e);
}
}
//使用XML Pull Parse分析XML响应数据流
private void processStream(InputStream inputStream) {
//创建新的XML Pull
XmlPullParserFactory factory;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
// 分配新的输入流
xpp.setInput(inputStream, null);
int eventType = xpp.getEventType();
// 继续直至到达文档的末尾
while (eventType != XmlPullParser.END_DOCUMENT) {
// 检查结果标记的开始标记
if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("result")) {
eventType = xpp.next();
String name = "";
// 处理结果标记中的每个结果
while (!(eventType == XmlPullParser.END_TAG &&
xpp.getName().equals("result"))) {
//检查结果标记中的名称标记
if (eventType == XmlPullParser.START_TAG &&
xpp.getName().equals("name"))
//提取POI名称
name = xpp.nextText();
//移动到下一个标记
eventType = xpp.next();
}
//对每个POI名称执行某些操作
}
// 移动到下一个结果标记
eventType = xpp.next();
}
} catch (XmlPullParserException e) {
Log.d("PULLPARSER", "XML Pull Parser Exception", e);
} catch (IOException e) {
Log.d("PULLPARSER", "IO Exception", e);
}
}
未完待续