摘要:本文介绍了Android应用如何与服务器通信的一些机制,并分享了笔者的一些开发经验与技巧,通过具体的代码描述OkHttp框架的使用,适合初学者。
对于初学者来说,前后端一手抓很常见,如果你想要了解一点后台开发的话,那么建议看一下我的另一篇文章:
Java后台开发,轻量级框架Spring+SpringMVC+MyBatis (SSM)的使用
1 - 引言
不太严谨地说,接入网络的终端(手机、主机等)都是通过网络层(IP层)的报文/数据报进行沟通的。具体可以参考百度百科-五层因特网协议栈的一些介绍,我们只需要了解一些基本原理就好了。(不过做网络应用开发还是应该学一点计算机网络的~)
狭义的理解,前后端通信的媒介就是Http报文,我们要做的就是 Android 前端发送Http报文,后端服务器接收并处理,然后返回一个结果报文。
而我接下来介绍的OkHttp框架就是一个比较流行的HTTP框架,它提供封装好的方法来帮助打包我们要提交或者请求的数据,并帮助我们发送到服务器。
2 - 初尝 OkHttp
2.1 一些准备
使用Android Studio的同学先添加依赖implementation com.squareup.okhttp3:okhttp:3.11.0'
,使用Eclipse的同学只能自己找包了(不过新手还是建议使用Android Studio,比较智能)。
在写博文的时候OkHttp还是3.11.0版本,最新版还是请查看OkHttp-GitHub。
此外还要在 AndroidManifest 文件中添加网络权限App才能联网:
<uses-permission android:name="android.permission.INTERNET"/>
2.2 Http 请求类型
Http请求有POST、GET、DELETE、PUT等方式,在Android里我们一般只会使用到两种,POST、GET。
POST:可以在报文内部(我们也可以称为body)添加参数,提交数据到服务器。
GET:也允许携带参数,不过参数要跟在指定的URL后面,如Http://localhost:8080?param=xxx & param=yyy
, 参数以键-值对的形式拼接,多个参数需要使用 & 符号。但这种形式安全性低,所以GET一般只用来请求一些数据,如请求百度的首页。一些把密码、个人信息等当作参数,明文发送的请求实在不是很明智。
那么怎么选择使用GET还是POST呢?
笔者分享一下自己在大学做开发的经历,希望能帮到大家。使用哪一种方法一般不是由前端开发人员决定的,而是后端开发人员根据前端的需求制作接口文档,里面详细记录了各种接口的URL、参数、返回值、注意事项等,前端开发人员对照文档使用即可。比如下面这个场景:
角色:前端技术人员小李,后端技术人员大明
小李:大明哥,我们前端组最近要实现登录的功能啦,你帮我们写个接口呗!
大明:哦哦,收到收到,有什么参数吗?
小李:传个用户名和密码就行了。
大明:行,那用户名用u_name表示,密码用u_password表示,行不?
小李:OK!对了,两个参数都是字符串类型的,字符集用UTF-8。
大明:没问题,迟点我把接口文档给你们组发过去。
小李:OK,辛苦辛苦~
(实际上并不会这么和谐~~ 需求一时爽,@&%#……)
如果你恰好参与了接口设计的讨论,那么不妨了解一下什么是REST风格,它是HTTP协议1.1版本制定的重要部分。简单来说就是POST、GET对应着网络资源的增加和获取,如上传一张图片对应着服务器文件资源的增加,加载图片对应着资源的获取。
2.3 Get 请求实例
使用OKHttp的同步GET方法:这里还是沿用《第一行代码》请求百度首页的栗子。
OkHttpClient client = new OkHttpClient(); //新建客户端处理请求
Request request = new Request.Builder()
.url("http://www.baidu.com") //添加要请求的URL
.build();
try