




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AndroidAndroid网络开发应用网络开发应用Android网络开发应用 Android是由互联网巨头Google带头开发,因此对网络功能的支持是必不可少的。在Android系统中,提供了以下几种方式可以实现网络通信:Socket通信、HTTP通信、URL通信、WebView网络开发。 在这里,重点介绍HTTP通信,其他的只作简要介绍。9.1 Socket通信 Socket,通常也称作“套接字”,它是网络中应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是Jav
2、a中较为常用的网络通信方式,而Android是采用Java语言进行开发。因此Android中Socket通信,完全采用的Java的Socket通信方式。9.1.1 Socket工作机制Socket工作机制 服务器要和客户端通信,两者都要实例化一个Socket。这两个Socket是不同的,客户端可以实现连接远程机器,发送数据,接收数据,关闭连接等,服务器还要实现绑定端口,监听到达的数据,接受来自远程机器的连接。 Android在包里面提供了两个类:ServerSocket和Socket,前者用于实例化服务器的Socket,后者用于实例化客户端的Socket。在连接成功时,应用程序两端都会产生一个
3、Socket实例,操作这个实例,完成客户端到服务器所需的会话。Socket分类 Socket一般有两种类型:TCP套接字和UDP套接字。 TCP和UDP在传输过程中的具体实现方法不同。两者都接收传输协议数据包并将其内容向前传送到应用层。TCP把消息分解成数据报,并在接收端以正确的顺序把它们重新装配起来,TCP还处理对遗失数据报的重传请求,由此可以减少上层应用层的工作。UDP不提供装配和重传请求这些功能,它只是向前传送信息包。位于上层的应用层必须确保消息是完整,并且是以正确的顺序装配的。9.3 URL通信 URL(Uniform Resource Locator)统一资源定位符,表示Intetn
4、et上的资源地址,实现对网络资源的定位。简单地说,URL就是Web地址,俗称“网址”。9.3.1 URL简介 URL支持HTTP、File、FTP等多种协议。Java通过URL标识,可以直接使用HTTP、File、FTP等多种协议,获取远端计算机上的资源信息,方便快捷地开发Internet应用程序。 1.统一资源定位器URL URL的语法格式是::/:/#。其中,、和是可选的。和是必需的。当没有给出时,浏览器默认的传输协议是HTTP。 2.URL类 包中定义了URL类。URL类表示一个统一资源定位器。它是指向互联网上某一资源的指针,这个资源可以是某个主机的一个文件或路径,也可以是文件上的一个锚
5、(或称引用)。9.3.2 URL通信开发 URL通信开发,分为以下几个步骤: (1)根据指定的URL网址,创建URL对象; (2)调用URLConnection.openConnection()方法打开连接; (3)获取输入流; (4)将网络信息提取显示。9.2 HTTP通信 HTTP(Hyper Text Transport Protocol)超文本传送协议是一种通信协议。它允许将超文本标记语言(HTML)文档从Web服务器传送到Web浏览器,是互联网上应用最为广泛的网络传输协议。所有的WWW文件都必须遵守这个标准。它是一个适用于分布式超媒体信息系统的应用层协议。9.2.1 HTTP通信方式
6、 HTTP详细规定了浏览器和万维网(World Wide Web)服务器之间互相通信的规则。客户机和服务器必须都支持HTTP,才能在万维网上发送和接收HTML文档并进行交互。 HTTP包含了GET和POST两种请求网络资源方式。GET与POST GET方法要求服务器将URL定位的资源放在响应报文放在响应报文的数据部分,会送给客户端。使用GET时,请求参数和对应的值附加在URL后面,利用一个问号“?”代表URL的结尾与请求参数的开始。 POST方法要求被请求服务器接收附在请求后面的数据,常用于提交表单。当客户端给服务器端提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求
7、数据中,以名称值的形式出现,可以传输大量数据。 因此,在编程之前,应当首先明确使用的请求方法,然后再根据所使用的请求数据方法,选择相应的编程方式。发送HTTP请求的方式 Android提供了HttpURLConnection和HttpClient接口来开发HTTP程序。 下面分别介绍使用这两种方式进行网络通信。HttpURLConnection通信 HttpURLConnection是Java的标准类,继承自HttpConnection。它是一个抽象类,不能实例化对象,主要是通过URL的openConnection方法获得。 由于openConnection()方法返回值类型是URLConne
8、ction类,所以需要强制转换类型为HttpURLConnection类。 openConnection()方法只创建HttpURLConnection实例,并不是真正的连接操作。而且每次调用openConnection()方法,都将创建一个新的实例。HttpURLConnection通信 (一一) .需要获取到 HttpURLConnection 的实例,一般只需 new 出一个 URL 对象,并传入目标的网络地址,然后调用一下 openConnection()方法即可,如下所示:URL url = new URL(http:/);HttpURLConnection connection =
9、 (HttpURLConnection) url.openConnection(); (二二) .得到了 HttpURLConnection 的实例之后,我们可以设置一下 HTTP 请求所使用的方法。常用的方法主要有两个, GET 和 POST。 GET 表示希望从服务器那里获取数据,而 POST 则表示希望提交数据给服务器。写法如下:connection.setRequestMethod(GET); (三)(三).接下来就可以进行一些自由的定制了,比如设置连接超时、读取超时的毫秒数,以及服务器希望得到的一些消息头等。 这部分内容根据自己的实际情况进行编写,示例写法如下: connection
10、.setConnectTimeout(8000); connection.setReadTimeout(8000); (四).之后再调用 getInputStream()方法就可以获取到服务器返回的输入流了,剩下的任务就是对输入流进行读取,如下所示: InputStream in = connection.getInputStream(); Post方式: DataOutputStream out = new DataOutputStream(connection.getOutputStream(); out.writeBytes(“username=*&password=*); (五
11、).最后可以调用 disconnect()方法将这个 HTTP 连接关闭掉,如下所示: connection.disconnect(); 使用HttpClient接口开发 使用Apache提供的HttpClient接口同样可以进行HTTP操作。HttpClient对的类做了封装和抽象,更适合在Android上开发应用,它可以完成和 HttpURLConnection 几乎一模一样的效果,但两者之间的用法却有较大的差别。HttpClient通信 (一). HttpClient 是一个接口,因此无法创建它的实例,通常情况下都会创建一个 DefaultHttpClient 的实例,如下所示: Htt
12、pClient httpClient = new DefaultHttpClient(); (二).接下来如果想要发起一条 GET 请求,就可以创建一个 HttpGet 对象,并传入目标的网络地址,然后调用 HttpClient 的 execute()方法即可: HttpGet httpGet = new HttpGet(http:/); httpClient.execute(httpGet); HttpClient通信 如果是发起一条 POST 请求会比 GET 稍微复杂一点,我们需要创建一个 HttpPost 对象, 并传入目标的网络地址,如下所示: HttpPost httpPost =
13、 new HttpPost(http:/); 然后通过一个 NameValuePair 集合来存放待提交的参数,并将这个参数集合传入到一个UrlEncodedFormEntity 中,然后调用 HttpPost 的 setEntity()方法将构建好的 UrlEncodedFormEntity 传入,如下所示: List params = new ArrayList(); params.add(new BasicNameValuePair(username, admin); params.add(new BasicNameValuePair(password, 123456); UrlEnco
14、dedFormEntity entity = new UrlEncodedFormEntity(params, utf-8); httpPost.setEntity(entity); HttpClient通信 (三).接下来的操作就和 HttpGet 一样了,调用 HttpClient 的 execute()方法,并将 HttpPost 对 象传入即可: httpClient.execute(httpPost); HttpClient通信 接收服务器回应的数据接收服务器回应的数据 执行 execute()方法之后会返回一个 HttpResponse 对象,服务器所返回的所有信息就会包含在这里面
15、。通常情况下我们都会先取出服务器返回的状态码,如果等于 200 就说明请求和响应都成功了,如下所示: if (httpResponse.getStatusLine().getStatusCode() = 200) / 请求和响应都成功了 HttpClient通信 接下来在这个 if 判断的内部取出服务返回的具体内容,可以调用 getEntity()方法获取到一个 HttpEntity 实例,然后再用 EntityUtils.toString()这个静态方法将 HttpEntity 转换成字符串即可,如下所示: HttpEntity entity = httpResponse.getEntity
16、(); String response = EntityUtils.toString(entity); 注意如果服务器返回的数据是带有中文的,需要在转换的时候将字符集指定成 utf-8 就可以了,如下所示: String response = EntityUtils.toString(entity, utf-8); HttpClient通信 实验:分别用HttpURLConnection和HttpClient两种方式获取百度首页的数据。解析数据 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。一般我们都会在网络上传输一些格式化后
17、的数据,这种数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要的那部分内容。 在网络上传输数据时最常用的格式有两种,XML 和 JSON。解析数据 解析 XML 格式的数据其实也有挺多种方式的,本节中我们介绍比较常用的两种,Pull 解析和 SAX 解析。PULL解析 1.首先要获取到一个XmlPullParserFactory 的 实 例,并 借助这个 实例的newPullParser()得到 XmlPullParser 对象。 2.调 用XmlPullParser 的 setInput()方法设置输入流,将服务器返回的 XML 数据设置进
18、去 ,即可开始解析。 3.通过 getEventType()可以得到当前的解析事件,然后在一个 while 循环中不断地进行解析 ,如果当前的解析事件不等于 XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用XmlPullParser.next()方法获取下一个元素后,并触发解析事件。 4.在 while 循环中,我们通过 getName()方法得到当前结点的名字,如果发现结点名等于id、 name 或 version,就调用 nextText()方法来获取结点内具体的内容 。SAX解析 SAX 解析也是一种特别常用的 XML 解析方式,虽然它的用法比 Pull
19、解析要复杂一些,但在语义方面会更加的清楚。 SAX(Simple API for XML)是基于事件驱动的,边加载边解析。SAX解析 通常情况下我们都会新建一个类继承自 DefaultHandler,并重写父类的五个方法 : startDocument()方法:在开始 XML 解析的时候调用,startElement()方法:在开始解析某个结点的时候调用, characters()方法:在获取结点中内容的时候调用, endElement()方法:在完成解析某个结点的时候调用, endDocument()方法:在完成整个 XML 解析的时候调用 。 其中, startElement()、 cha
20、racters()和 endElement()这三个方法是有参数的,从 XML 中解析出的数据就会以参数的形式传入到这些方法中。 SAX解析 注意:每当开始解析某个结点的时候, startElement()方法就会得到调用,其中 localName 参数记录着当前结点的名字,这里我们把它记录下来。接着在解析结点中具体内容的时候就会调用 characters()方法,我们会根据当前的结点名进行判断,将解析出的内容添加到哪一个 之前已定义好的StringBuilder 对象中。最后在 endElement()方法中进行判断,如果 app 结点已经解析完成,就打印出 id、 name 和 versi
21、on 的内容。然后,清空各个 StringBuilder。SAX解析 基本步骤: 1.创建SAXParserFactory对象; 2.根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器; 3.根据SAXParser解析器获取事件源对象XMLReader; 4.实例化一个DefaultHandler对象; 5.链接事件源对象XMLReader到事件处理类DefaultHandler中; 6.调用XMLReader的parse方法从输入源获取到XML数据; 7.通过DefaultHandler返回需要的数据集合。实验 分别使用PULL和SAX实现对本地XML文件的解析。JSON JSON: javascript对象表示法(javascript Object Notation),它是一种轻量级的文本数据交换格式,类似于XML,但比XML更小,更快,更易解析。 比起 XML, JSON 的主要优势在于它的体积更小,在网络上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防静电手套战略市场规划报告
- 电子握力计产业分析报告
- 底涂漆市场分析及竞争策略分析报告
- 盐城市妇幼保健院招聘专业技术人员笔试真题2024
- 衢州市卫生健康委员会衢州市人民医院招聘笔试真题2024
- 内蒙古工业大学事业编制人员招聘笔试真题2024
- 2024年杭州市采荷中学教师招聘考试真题
- 河北承德医学院附属医院招聘工作人员笔试真题2024
- 2025年大规格石英玻璃扩散管项目发展计划
- 通信行业劳动力分配及保障措施
- 颈椎病针灸穴位治疗
- 2025年中国汽车车灯行业市场现状、前景分析研究报告(智研咨询发布)
- 汤臣倍健营养品市场推广方案
- 2024年湖北省中考语文真题(学生版+解析版)
- 告诉我地址 -从IPv4到IPv6的传奇 课件 2024-2025学年清华大学版(2024)B版初中信息技术七年级上册
- 2024旋翼无人机巡检作业规范
- 医学教程 《急性阑尾炎幻灯》
- 重型货车整车运输协议样本
- 读后续写-期中真题汇编(原卷版)
- (部编版)统编版小学语文教材目录(一至六年级上册下册齐全)
- 允许孩子犯错课件
评论
0/150
提交评论