软件开发工具:第6章 Android网络应用_第1页
软件开发工具:第6章 Android网络应用_第2页
软件开发工具:第6章 Android网络应用_第3页
软件开发工具:第6章 Android网络应用_第4页
软件开发工具:第6章 Android网络应用_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、郑州大学信息工程学院第六章 Android网络应用点击添加文本郑州大学信息工程学院6.1 Http通信6.2 Socket通信6.3 使用WebView显示网页6.4 项目实战:查询员工信息6.5 本章小结6.1 HTTP通信1Http协议简介2Http请求方式3HttpURLConnection接口4HttpClient接口Http协议简介Http(Hypertext Transfer Protocol),是Web互连网的基础,它是建立在TCP协议之上的一种客户端/服务器端协议。Http连接的工作过程是客户端发送的Http请求,等待服务器接收请求回送响应,客户端解析、处理返回的信息。Http

2、连接是一种“短连接”、“无状态”。客户端向服务器请求服务时,须声明请求相应的行为。请求方法常用的有Get、Post两种。Http请求方式-Get方式Get方式是将传递的参数以某种数据串的方式显示的追加到提交的URL后面,传递的数值封装在传值变量中,通过传值变量来获取传递的值。传值数据串与URL地址之间以?号间隔,数据串传递参数的形式是name=value,name为传值变量,value为传递的值。如:GET/signup/signup.php?inviteCode=2388493434Get方式传递参数数据量较小,安全性非常低。Http请求方式-Post方式Post请求可以向服务器传送数据,而

3、且数据放在HTML HEADER内一起传送到服务端URL地址,数据对用户不可见。Post传输方式不在URL里传递,也正好解决了get传输量小、容易篡改及不安全等一系列不足。HttpURLConnection接口HttpURLConnection接口是继承于URLConnection类,二者都是抽象类,通过URL的openConnection()方法获得HttpURLConnection对象。 代码如下所示: URL url = new URL(URL地址); HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();Ht

4、tpURLConnection接口HttpURLConnection在URLConnection的基础上发送Http请求获取资源常用方法:void setDoInput():设置URLConnection的doInput字段的值,值为true或者false。如果使用URL连接进行输入,设为true,反之,则设为false。void setDoOutput():设置URLConnection的doOutput字段的值,值为true或者false。如果使用URL连接进行输出,设为true,反之,则设为false。InputStream getInputStream():获取URL连接的输入流,从而

5、获取响应的内容。OutputStream getOutputStream():获取URL连接的输出流,从而传递参数给服务器。HttpURLConnection接口void setUseCaches():设置URL连接的useCaches字段。void setInstanceFollowRedirects():设置是否应该自动执行 http 重定向。void setRequestProperty(String key,String value):设置一般请求属性。int getResponseCode():获取服务器的响应代码。String getResponseMessage():获取服务器的

6、响应信息。String getResquestMessage():获取发送请求的方法。void setRequestMethod():设置请求方式。HttpURLConnection接口HttpURLConnection请求获取URL引用的资源步骤(1)创建HttpURLConnection对象;(2)设置请求的属性和对象参数;(3)如果是Get方式请求,由于HttpURLConnection默认使用Get方式,因此直接调用connect()方法即可建立连接;如果是以Post方式请求,则需要设置请求方式为Post。注:涉及到访问网络时,需要在项目的配置文件AndroidManifest.xml

7、文件中须添加访问网络的权限HttpClient接口使用HttpClient发送请求、接收响应步骤:(1)创建HttpClient对象。(2)创建请求方法的实例,并指定请求URL。 如果需要发送GET请求,创建HttpGet对象; 如果需要发送POST请求,创建HttpPost对象。(3)设置参数。调用setParams(HetpParams params)方法来添加请求参数;HttpPost对象可调用setEntity(HttpEntity entity)方法来设置参数。(4)发送请求获取响应。HttpResponse httpResponse=client.execute(http);/发送

8、请求,返回Http响应HttpClient接口(5)获取信息。调用HttpResponse相应的方法可获取服务器返回的信息;调用HttpResponse的getEntity()方法可获取HttpEntity对象;调用EntityUtils.toString()方法获取封装在HttpEntity对象中的服务器的响应内容。(6)释放连接。Get方法;Post方法(使用NameValuePair来保存要传递的参数,并设置所使用的字符集)。Android 6.0抛弃HttpClientAndroid6.0 SDK中删除HttpClient的相关类设置android SDK的编译版本为23时,且使用了h

9、ttpClient相关类的库项目:如android-async-http等等,会出现有一些类找不到的错误。解决办法:修改gradle构建文件useLibrary org.apache.http.legacy6.2 Socket通信1Socket简介2使用基于TCP协议的Socket进行通信3使用基于UDP的Socket通信Socket简介Socket是一种抽象层,通信两端通过它来发送和接收数据。Socket提供了应用程序与外界通信的端口并为通信双方的提供了数据传输通道。Socket的主要特点:数据丢失率低,使用简单且易于移植。Socket有两种传输模式:面向连接和无连接。不讲,其他课程已讲过S

10、ocket的两种传输模式的区别面向连接模式使用TCP协议,在通信两端建立通信链路,依次发送和接收数据。无连接模式使用UDP协议,将数据进行打包发送。无连接模式接收端接收数据包的顺序与发送端发送的顺序是不一样的,而且数据安全性欠佳。使用基于TCP协议的Socket进行通信1、TCP简介TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。在简化的计算机网络OSI模型中,TCP完成第四层传输层所指定的功能。应用层向传输层层发送用于网络间传输的数据流,然后TCP把数据流分割成适当长度

11、的报文段,之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。使用基于TCP协议的Socket进行通信2、基于TCP的Socket通信步骤(1)创建TCP服务器端。ServerSocket(int port):指定端口号(port)来创建ServerSocket对象。ServerSocket(int port,in backlog):增加改变连接队列的参数backlog。ServerSocket(int port,int backlog,InetAddress localAddr):增加IP地址参数localAddr,用来指定将ServerSocket绑定到指定的IP地

12、址。(2)等待客户端请求。一个服务器应该可以循环调用accept()方法不断接收客户端请求使用基于TCP协议的Socket进行通信(3)服务器端接收请求,返回响应。accept()方法在没有数据进行接收的处于堵塞状态。接收数据时,可以通过InputStream读取接收的数据,OutputStream返回响应数据。(4)客户端发送请求,获取返回信息。服务器端创建ServerSocket对象等待客户端请求;客户端创建一个指定服务器端IP地址和端口号的Socket对象,通过InputStream读取数据、OutputStream写入数据。使用基于UDP的Socket通信1、UDP简介UDP(User

13、 Datagram Protocol,用户数据包协议),是简化的计算机网络OSI模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP的缺点是不提供数据报分组、组装和不能对数据包排序UDP的优点是在传输数据包前不用在客户端和服务器之间建立一个连接,且没有超时重发等机制,因此传输速度很快。使用DatagramSocket创建UDP服务器端步骤(1)创建DatagramSocket对象。DatagramSocket():创建DatagramSocket实例,并将该对象绑定到本机默认IP地址、本机所有可用端口中随机选择的某个端口。DatagramSocket(int prot):

14、创建DatagramSocket实例,并将该对象绑定到本机默认IP地址、指定端口。DatagramSocket(int port, InetAddress laddr):创建DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。(2)创建DatagramPacket对象。(3)接收数据。getData()方法获取数据缓冲区;getOffset()方法获取数据起始位置;getLength()方法获取数据长度。使用DatagramSocket创建UDP客户端步骤(1)客户端创建指定监听端口的DatagramSocket对象。DatagramSocket socket = new

15、 DatagramSocket(10000);/需指定端口号(2)创建InetAddress对象。InetAddress serverAddress = InetAddress.getByName(“192.168.101”);/将IP地址字符串转化为要发送请求的网络地址(3)创建DatagramPacket对象。DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress , 10000); /4个参数分别是数据包、数据包长度、要发送的地址以及端口号(4)发送数据。socket.send(packet)

16、; /调用send()方法发送数据Http与Socket通信区别Http连接使用的是“请求响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端向服务器发送请求。Android网络开发注意事项编写本章的网络程序时,网络任务不能放在主线程中执行,否则会报异常“android.os.NetworkOnMainThreadException”需要使用线程编程技术解决该异常,或者使用安卓的AsyncTask类GUI的线程同步(AsyncTask)An

17、droid AsyncTaskAndroid的AsyncTask是一个轻量级异步处理类。public abstract class AsyncTask AsyncTask定义了三种泛型类型 Params,Progress和Result。Params 启动任务执行的输入参数,比如HTTP请求的URL。Progress 后台任务执行的百分比。Result 后台执行任务最终返回的结果,比如String。在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。Android AsyncTask一个异步任务的执行一般包括以下几个步骤:1.execute(Para

18、ms. params),执行一个异步任务。2.onPreExecute(),在execute(Params. params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。3.doInBackground(Params. params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。4.onProgressUpdate(Progress. values),在调用publish Progress (Progress. values) 时,此方法被执行,直接将进度信息更新到UI组件上。5.onPostExecute(Resul

19、t result),当后台操作结束时,此方法将会被调用,直接将计算结果显示到UI组件上。Android AsyncTask在使用的时候,有几点需要格外注意:1.异步任务的实例必须在UI线程中创建。2.execute(Params. params)方法必须在UI线程中调用。3.不要手动调用onPreExecute(),doInBackground(Params. params),onProgressUpdate(Progress. values),onPostExecute(Result result)这几个方法。4.不能在doInBackground(Params. params)中更改UI组

20、件的信息。5.一个任务实例只能执行一次,如果执行第二次将会抛出异常。6.3 使用WebView显示网页1、WebView简介2、WebView加载网页3、WebView加载HTML代码4、WebView中使用JavaScriptWebView简介WebView是一个常用的控件,是内置的浏览器控件,我们可以用它来浏览网页、打开文档等。WebView控件本身就是一个浏览器实现,它的内核基于开源的WebKit引擎。如:注:要使用WebView控件访问HTML页面,需要添加访问网络的权限,代码如下: WebView加载网页通过WebView可以相当于浏览器加载Web页面,并对页面实现前进后退等操作。调

21、用loadUrl(String url)方法加载url对应的网页。如:WebView web = (WebView) findViewById(R.id.webView); web.loadUrl();WebView可以加载本地文件,此时的URL是文件路径,本地文件存放在assets文件中。如“file:/android_asset/XX.html”。WebView控件提供了大量的方法,例如,goback()后退,goForward()前进等。WebView加载HTML代码WebView提供一个loadDataWithBaseURL()方法可以直接载入HTML字符串,并对该字符串进行HTML解

22、析。loadDataWithBaseURL()的前3个参数分别是加载的HTML字符串、HTML代码的MIME类型以及HTML代码编码所用的字符集,其余两个可以指定该页面的baseUrl。如:void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)WebView中使用JavaScriptWebView提供了一个WebSettings管理工具类,该工具用来管理WebView选项设置状态。通过getSettings()方法获得WebView设置的

23、管理对象WebSettings,从而调用setJavaScriptEnabled()方法允许WebView加载的网页使用JavaScript。调用addJavascriptInterface(Object object, String name)实现将Java对象暴露给JavaScript,其中object为Java对象的实例,name为用户自定义的名字。WebView中使用JavaScript实现WebView中的JavaScript与Android应用程序交互步骤:(1)创建WebSettings工具类对象。(2)调用setJavaScriptEnabled()方法开启JavaScript使用(3)调用addJavascriptInterface()方法,创建一个能访问Java方法接口。6.4项目实战:查询员工信息任务说明:在用户界面中输入要查询的员工编号,点击查询按钮,向服务器发送Post请求,并将服务器返回的查询结果显示在界面中。框架讲解Employee

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论