1.android网络编程知识复习
Android的网络编程分为2种:基于http协议的,和基于socket的。Socket一般应用于社交聊天的应用中,这里关联的比较少就不讲了,我们来说说基于HTTP协议的编程。

基本原理 : 它的工作原理特别的简单,就是客户端向服务器发出一条HTTP 请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。

HTTP请求:HttpURLConnection 和 HttpClient

服务器端返回客户端的内容:
1)以HTML代码的形式返回。
2)以XML字符串的形式返回。返回的数据需要通过XML解析(SAX、DOM,Pull,等)器进行解析。
3)以json对象的方式返回。

2. HTTP请求网络数据
HttpClient在API等级22:Android 5.1 Lollipop开始被google废弃

HttpURLConnection 请求网络:

private void getXMLWithHttpURLConnection(){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection urlConnection = null;
try {
Log.e(TAG,”开始请求网络数据…”);
URL url = new URL(“http://192.168.31.139/people.xml”);
//利用HttpURLConnection对象从网络中请求网络数据
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(“GET”); //设置请求方式GET,POST
//设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作
urlConnection.setConnectTimeout(8000);
//connection.setReadTimeout(5000); //设置读取超时
if (urlConnection.getResponseCode() != 200) {
//对响应码进行判断,200为成功
throw new RuntimeException(“请求url失败”);
}
//从Internet获取网页,发送请求,将网页以流的形式读回来
InputStream inputStream = urlConnection.getInputStream();
////对输入流进行读取
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder stringBuilder = new StringBuilder();
while ((line = bufferedReader.readLine())!=null){
stringBuilder.append(line);
}
//解析xml,下一节就讲
parseXMLWithPull(stringBuilder.toString());

} catch (Exception e) {
e.printStackTrace();
} finally {
Log.e(TAG,”关闭请求连接。”);
if (urlConnection!=null) urlConnection.disconnect();
}
}
}).start();
}

3.解析XML数据
3.1 PULL解析:

在Android上使用XmlPullParser是一中高效率和易维护解析XML的方法 。Android已经在历史上有两个实现这个接口实现类:

(1)KXmlParser,通过XmlPullParserFactory.newPullParser();
(2)ExpatPullParser,通过Xml.newPullParser();

/**
* PULL 解析 xml
* @param xmlString
*/
private void parseXMLWithPull(String xmlString){
try {
Log.d(TAG,”>>> 开始解析XML…”);
//获取XmlPullParser对象
//*种获取XmlPullParser对象的方式
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
//第二种获取XmlPullParser对象的方式
//XmlPullParser parser=Xml.newPullParser();

parser.setInput(new StringReader(xmlString));
int eventType = parser.getEventType();
String name =”姓名”;
String age =”年龄”;
String sex =”性别”;
while (eventType !=XmlPullParser.END_DOCUMENT ){
String nodeName = parser.getName();
switch (eventType){
//开始读取XML文档 ,对应people节点
case XmlPullParser.START_DOCUMENT:
break;
// 开始解析某个结点,对应name ,age,sex标签
case XmlPullParser.START_TAG:
if (“name”.equals(nodeName)) name = parser.nextText();
if (“age”.equals(nodeName)) age = parser.nextText();
if (“sex”.equals(nodeName)) sex = parser.nextText();
break;
// 完成解析某个结点,对应person节点
case XmlPullParser.END_TAG:
if (“person”.equals(nodeName)){
Log.d(TAG,”–name is:” + name);
Log.d(TAG,”–age is:” + age);
Log.d(TAG,”–sex is:” + sex);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}

3.2 建立本地web服务器:

讲了这么多, 到这里才跟标题挂上钩,我也是醉了。
第2节HTTP请求网络数据中的链接 http://192.168.31.139/people.xml 就是在本地建立的一个服务器里的文件,192.168.31.139就是本人的ip地址,people.xml就是我新建的xml 文件。步骤如下:

1.在http://rj.baidu.com/soft/detail/14824.html?ald 下载 Apache HTTP Server软件,下载完成后双击下载文件httpd-2.2.25-win32-x86-no_ssl.msi安装,
%title插图%num

2.在安装路径…\Apache2.2\htdocs新建people.xml文件
3.在浏览器中输入http://127.0.0.1/people.xml,即可访问到我们刚刚建立的people.xml文件内容

%title插图%num

4.值得注意的问题
在手机上访问本地电脑web服务器,设置”localhost”或者”127.0.0.1”是不行的,在模拟器上将 ip设置为”10.0.2.2”是可以访问的,但到真机上此方法行不通。

真机连接方法:1.本地电脑搭建的服务器与手机共同连接到一个无线网络下。
2.服务器端需要关闭防火墙。

%title插图%num