android手机访问本地电脑Web服务器
2016-05-26 17:49
621 查看
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安装,
2.在安装路径…\Apache2.2\htdocs新建people.xml文件
3.在浏览器中输入http://127.0.0.1/people.xml,即可访问到我们刚刚建立的people.xml文件内容
4.值得注意的问题
在手机上访问本地电脑web服务器,设置”localhost”或者”127.0.0.1”是不行的,在模拟器上将 ip设置为”10.0.2.2”是可以访问的,但到真机上此方法行不通。真机连接方法:1.本地电脑搭建的服务器与手机共同连接到一个无线网络下。
2.服务器端需要关闭防火墙。
其实在有无线局域网的情况下真机与模拟器连接本地服务端是一样的,唯一区别是真机连接到本地服务器需要关闭防火墙。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析