Android应用开发技术 课件 第10章 网络编程_第1页
Android应用开发技术 课件 第10章 网络编程_第2页
Android应用开发技术 课件 第10章 网络编程_第3页
Android应用开发技术 课件 第10章 网络编程_第4页
Android应用开发技术 课件 第10章 网络编程_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

网络编程前言网络通信是Android应用实现业务功能的核心。Android应用常常作为客户端,依赖远程服务器提供数据和业务支持。例如,社交应用通过它传输媒体数据,购物应用通过它获取商品信息和处理订单。没有网络通信,这些应用将失去其核心价值。Android提供了丰富的网络通信组件,简化应用了与后端服务器的通信编程,本章就来学习网络通信编程。目录01HTTP与网络连接02前后端分离架构与JSON协议03OkHttp网络编程

10.1HTTP与网络连接

10.1.1HTTP协议HTTP(HyperTextTransferProtocol)超文本传输协议,它规定了浏览器和服务器之间相互通信的规则。HTTP协议是一种请求/响应式的协议。当客户端与服务器端建立连接后,向服务器端发送的请求,称作HTTP请求。当服务器端接收到请求后会做出响应,称为HTTP响应。

10.1HTTP与网络连接

10.1.2HTTP请求1.HTTP请求结构HTTP请求报文由3大部分组成(1)请求行必须在HTTP请求报文的第一行。(2)请求头从第二行开始,到第一个空行结束。(3)请求体通常以键值对{key:value}方式传递数据

10.1HTTP与网络连接

10.1.2HTTP请求2.HTTP常用请求方法当我们使用HTTP协议时,我们可以通过不同的请求方法(HttpMethod)来实现不同的操作。请求方法描述GET从服务器获取资源,不会修改服务器上的数据。POST向服务器提交数据,用于创建新资源或更新现有资源。POST请求是非幂等请求。PUT向服务器提交数据,用于更新现有资源。PATCH向服务器提交数据,用于更新现有资源的部分内容。DELETE从服务器删除资源。

10.1HTTP与网络连接

10.1.3HTTP响应1.HTTP响应结构HTTP的响应报文也由三部分组成

(1)响应行必须在HTTP响应报文的第一行。(2)响应头从第二行开始,到第一个空行结束。(3)响应体

10.1HTTP与网络连接

10.1.3HTTP响应2.HTTP响应状态码HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器端处理是否正常、通知出现的错误等工作。状态码描述1xxInformational,信息性状态码,表示接受的请求正在处理。2xxSuccess,成功状态码,表示请求正常处理完毕,典型码为200OK、201Created。3xxRedirection重定向状态码,需要跳转到其他地址,进行附加操作以完成请求,典型码为302

Move

Temporarily4xxClientError客户端错误状态码,服务器无法处理客户端发送的请求,典型码为404NotFound、400BadRequest、405Unsuportmediatype。5xxServerError服务器错误状态码,服务器处理请求时出错,典型码为500ServerError。

10.1HTTP与网络连接

10.1.4使用HttpURLConnection编程在Android开发中,我们可以使用HttpURLConnection来实现HTTP请求。

10.1HTTP与网络连接

10.1.4使用HttpURLConnection编程注意为应用授予网络访问权限,否则会引发以下异常:(1)在AndroidManifest.xml中添加如下授权(2)若请求为“http”而非“https”则还需要在application元素中添加属性:

否则会引发以下异常:<uses-permissionandroid:name="android.permission.INTERNET"/><applicationandroid:usesCleartextTraffic="true"......

10.2前后端分离架构与JSON协议

10.2.1前后端分离架构(1)目前的互联网应用,往往采用前后端分离架构进行开发。(2)后端是服务器,是应用程序的主体,用于存取数据并处理负责的业务,后端通常采用Java、.NET、PHP、Python的技术框架实现。(3)前端是用户界面,可以是Android和IOS的原生应用,也可以实现网页的方式实现。(4)前后端之间往往基于JSON格式和RESTful风格的接口进行数据通信。

10.2前后端分离架构与JSON协议

10.2.1前后端分离架构

10.2前后端分离架构与JSON协议

10.2.2JSON协议1.JSON协议概述前后端分离架构中,两端的设备通常是异构的,通过HTTP协议进行数据通信,数据就需要使用统一的协议进行封装。JSON是目前最为常用的基于HTTP的数据传输协议。JSON是JavaScript对象表示法(JavaScriptObjectNotation)的缩写,是一种轻量级的数据交换格式。JSON格式的数据可以被多种编程语言读取和生成,包括C#、Java、JavaScript、Python等。JSON只有两种结构:对象和数组,由这两种结构嵌套和组合来表示各式各样的数据。

10.2前后端分离架构与JSON协议

10.2.2JSON协议2.JSON基本语法JSON中的对象使用大括号{…}中书写,可以包含多个键/值对,其中键必须是字符串,值可以是合法的JSON数据类型(字符串、数字、对象、数组、布尔值或null)。每个键/值对使用逗号分隔。JSON中的数组以左中括号[开始,右中括号]结束,值之间使用逗号分隔。JSON中数组值必须是合法的JSON数据类型(字符串、数字、对象、数组、布尔值或null)。{"name":"John","age":30,"city":"NewYork"}{"employees":[{"firstName":"John","lastName":"Doe"},{"firstName":"Anna","lastName":"Smith"}]}

10.2前后端分离架构与JSON协议

10.2.2JSON协议3.JSON与Java编程在Java平台中,有不少开源的JSON解析器,可以实现Java对象与JSON协议数据的相互转换,如Gson、Jackson等。以下以Gson使用为例。(1)在项目中导入Gson组件(perties)(2)Java对象与JSON字符串的转换(3)把json(数组)字符串转换成Java对象集合implementation'com.google.code.gson:gson:2.8.6'Gsongson=newGson();Stringjson=gson.toJson(todo);Todotodo2=gson.fromJson(json,Todo.clsss);Gsongson=newGson();TypelistType=newTypeToken<List<Todo>>(){}.getType();List<Todo>list=gson.fromJson(json,listType);

10.2前后端分离架构与JSON协议

10.2.3RESTfulAPI1.RESTfulAPI简介基于HTTP协议的前后端程序,为了能实现通信,还需要一种统一的请求响应风格来实现功能,例如数据的增删改查的操作。业界往往采用RESTful风格来实现基于HTTP的通信接口。RESTful风格的API接口是一种软件架构风格、设计风格,可以让软件更加清晰,更简洁,更有层次,可维护性更好。RESTful协议通过HTTP方法GET、POST、PUT、DELETE等来实现对资源的查询、新增、修改删除等操作。

10.2前后端分离架构与JSON协议

10.2.3RESTfulAPI2.RESTful风格请求示例操作示例解析查询对象GETGET/users/1这个请求表示获取ID为1的用户信息。查询

列表GETGET/users查询并返回多个用户集合新增POSTPOST/usersContent-Type:application/json{"name":"John","age":30,"city":"NewYork"}这个请求表示创建一个新的用户。修改UPDATEPUT/users/1Content-Type:application/json{"name":"John","age":31,"city":"NewYork"}这个请求表示创建一个新的用户。修改

DELETEDELETE/users/1这个请求表示删除ID为1的用户信息。

10.2前后端分离架构与JSON协议

10.2.3RESTfulAPI3.使用json-server模拟后端RESTfulAPI(1)下载并安装Node.js:/(2)在命令行下执行npm包管理,安装json-server(3)创建一个JSON文件作为数据源(4)启动json-server服务器npminstall-gjson-serverjson-server--watch--hosttodos.json文件todos.json{"todos":[{

"id":1,

"title":"长跑“},{

"id":2,

"title":"背单词“}]}json-server中,若要通过IP地址访问服务器,则需要把host指定为

10.3OkHttp网络编程

10.3.1使用OkHttp1.OkHttp概述OkHttp是一个处理网络请求的开源项目,Android当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection。它的特点是轻量级、简单易用、性能优越、支持SPDY协议、支持HTTP2协议、支持HTTP请求、HTTPS请求、支持同步异步、支持文件下载、加载图片、基于Http的文件上传等。OkHttp是第三方组件,使用前需要在perties)导入依赖:implementation'com.squareup.okhttp3:okhttp:4.9.3'

10.3OkHttp网络编程

10.3.1使用OkHttp2.GET请求

(查询)//创建OkHttp客户端OkHttpClientclient=newOkHttpClient();//创建请求Request.Builderbuilder=newRequest.Builder();Requestrequest=builder.url(":3000/todos").get().build();Callcall=client.newCall(request);try{//执行请求并获取响应Responseresponse=call.execute();Stringjson=response.body().string();//获取响应体内容(json)Log.d("JsonTest",json);}catch(IOExceptione){Log.d("JsonTest","---Error---\n"+e.toString());}安卓虚拟机访问开发机PC的IP地址为:

10.3OkHttp网络编程

10.3.1使用OkHttp3.POST请求

(新增)

//把POST的对象转换成JSON字符串

Todotodo=newTodo(0,"Testpost.");Stringjson=gson.toJson(todo);//封装请求体(把json作为参数)

MediaTypejsonMediaType=MediaType.parse("application/json;charset=utf-8");RequestBodyrequestBody=RequestBody.create(json,jsonMediaType);OkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url(":3000/todos").post(requestBody)//创建请求时放入封装好的请求体

.build();try{//执行请求并查看HTTP状态码

intcode=client.newCall(request).execute().code();Log.d("JsonTest","Httpcode:"+code);}catch(IOExceptione){Log.d("JsonTest","---Error---\n"+e.toString());}

10.3OkHttp网络编程

10.3.1使用OkHttp3.PUT请求

(修改)Todotodo=newTodo(2,"Testupdate.");Stringjson=gson.toJson(todo);OkHttpClientclient=newOkHttpClient();RequestBodyrequestBody=RequestBody.create(json,jsonMediaType);Requestrequest=newRequest.Builder().url(":3000/todos/"+todo.getId()).put(requestBody).build();try{intcode=client.newCall(request).execute().code();Log.d("JsonTest","HttpCode:"+code);}catch(IOExceptione){Log.d("JsonTest","---Error---\n"+e.toString());}

10.3OkHttp网络编程

10.3.1使用OkHttp4.Delete请求

(删除)intid=6;OkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url(":3000/todos/"+id).delete().build();try{intcode=client.newCall(request).execute().code();Log.d("JsonTest","Httpcode:"+code);}catch(IOExceptione){Log.d("JsonTest","---Error---\n"+e.toString());}

10.3OkHttp网络编程

10.3.2网络编程与多线程Android应用程序访问互联网需要使用多线程1.使用多线程执行网络请求在Android4.0及更高版本中,默认情况下不允许在主线程中进行网络访问。否则将抛出NetworkOnMainThreadException异常。这是因为在主线程中进行网络访问可能会导致UI线程阻塞,从而导致应用程序无响应。因此,需要在Android应用程序中使用多线程来执行网络访问。newThread(newRunnable(){publicvoidrun(){//执行网络请求……}}).start();

10.3OkHttp网络编程

10.3.2网络编程与多线程2.回到主线程更新控件Android还中建议使用runOnUiThread()方法实现子线程中对UI控件的更新。它用于从子线程中切换到主线程来执行一些需要在主线程执行的操作。如果您不使用runOnUiThread()方法,可能会导致应用程序崩溃或出现其他问题。runOnUiThread(newRunnable(){

publicvoidrun(){//更新UI控件……}});

10.3OkHttp网络编程

10.3.3网络编程与多线程publicvoidonClick(Viewv){//创建线程执行网络请求

newThread(newRunnable(){//封装线程任务

publi

温馨提示

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

评论

0/150

提交评论