想放松的博客

主页

我很独特,这个世界上只有一个我。

安卓前后端连接Android Studio+SpringBoot

2020516

1. 首先需要安装postman软件,用于测试后端接口

 

2. IEDA打开后端的工程并运行,观察controller文件夹下的文件,controller这一层是接受前端请求的。这里按照一个数据表一个文件进行分类。

 

3. 后端接口的类别主要有3种,根据接口函数的参数前方@的不同分别@RequestBody@RequestParam和上传文件型。如下图所示

 

4. 先学会这3种不同的类型在postman中如何测试连接通信,然后再从普遍性到特殊性,在AS里面进行前后端通信。

共同的地方:不管是哪种类型的,都是用POST方法发送,并且在地址栏里填写接口的地址方式都是一样的,有2级路径,如下图所示

不同之处

类别1——Body:以Comment中的add接口为例子

先去resources目录下的mapper目录下打开对应的Mapper.xml文件夹,这里面写的是操作数据库时的SQL语句。可以看到这里有个idadd的语句块,这是add接口收到请求后会执行的SQL语句。

postman中,先选择Body,然后点击raw,再将格式切换为JSON,在编辑区写出JSON格式的文本,JSON文本中的键名就是SQL语句中#{}里面的变量名,键值就是你要传进去的变量值,这里一定要打开数据库看清楚对应字段的类型。如下图所示:

确认无误后点击SEND按钮,会发现IDEA运行日志中出现刚刚进行的SQL操作的结果,刷新数据库会发现该记录被添加到数据库中了,这样就成功了!(因为这是insert操作,接口函数的返回类型是void,所以postman这边不会有结果显示)

 

类型2——Param类型:以comment中的listByUid接口为例

这种类型非常简单,只需要看controller层就行了!在postman中先点击Params,然后在下面添加KEY,这里的KEY就是接口函数的参数,在VALUE里填入你需要传入的值。

确认无误后点击send按钮,可以看到IDEA运行日志里出现了SQL查询结果,postmna这边的结果区也显示出了JSON格式的结果,这样就成功了!(注意,这里返回的是JSON数组,后面在AS里前端获取返回值时对数组or单个元素的操作是不同的)

 

类型3——上传文件型:以commentupload_img接口为例子

这种类型的接口需要看controller层和service层,请同时打开service文件夹下的impl文件夹下的对应的Service文件!下图所示是service层中找到的对应操作的函数,可见文件会被上传到后端工程文件夹下的upload文件夹下的comment_img文件夹下

打开postman,选择POST方法,地址栏输入对应的接口的路径,然后选择Body,选择form-data,在KEY这边先选择类型为File

 

之后再在KEY里填入fileVALUE里选择一个你要上传的文件

确认无误后,点击send按钮,可以看到postman里收到返回的信息,code200,并且body这边有上传后的文件在服务器上的文件名,这样就成功了!

我们可以去comment_img文件夹下看看有没有刚刚上传的文件,果然是有的,hhh

 

5. android studio里写发送post请求的代码。postman的普遍性规律测试通过后,AS里使用后端接口的道理是一样的,postman里怎么发送post请求,AS也跟着学就行了!

三种类型的共同点:以下是代码模板

上图例子是按钮按下后发送一个POST请求,首先要创建一个Thread,网络请求操作较慢,所以要在子线程里操作,在主线程里发送网络请求会造成堵塞,APP可能会崩溃的。其次是网络请求的操作要放在try语句里,毕竟网络通信不一定成功的。最后需要注意的是子线程不能直接更新UI,要在子线程里操作UI,需要借助runOnUiThread

不同点

类型1——Body:以Comment中的add接口为例子

我们知道它在postman中是这样发送post请求的

转换为AS发送请求的代码如下所示,红框中是类型1——body发送的请求的方式。(因为这个后端接口没有返回值,所有不需要考虑获取后端的返回值)

这里的Toast忘记放到runOnUiThread里面了!注意!

运行一下APP点击对应的按钮发送POST试试,看到IDEA和数据库这边都有反应,成功啦!

 

类型2——Paramcomment中的listByUid接口为例

postman中是这样发送post请求给这个接口的

那么在AS中,代码如下图所示,如下图所示进行发送:

这里的Toast忘记放到runOnUiThread里面了!注意!

运行APP,点击对应的按钮试试,发现AS的日志里成功打印出从后端获取过来的值,成功!

 

类型3——上传文件型:以commentupload_img接口为例子

postman中是这样发送请求的

切换到AS,如下图代码所示将文件上传到后端接口上

运行APP点击相应的按钮确认一下,看看日志,文件夹里都有了,说明成功!

文件上传注意事项

1. 大文件上传比较慢,前端应该想办法控制一下,在文件上传成功前不要让用户觉得好像没在上传,于是狂点上传按钮导致上传了好几份文件,上传的过程以及上传成功后最好加一些UI上的提示。

2. 上传文件的接口只是上传文件而已,数据库里保存文件路径的字段还需要调用其他相应的接口去修改哦!

3. 小心安卓权限问题,这里打开需要上传的文件时是需要存储空间权限的!

还有这个路径只是个例子,在vlog++项目中需要用下图所示的Environment.getExternalStorageDirectory()来获取文件所在的路径

 

其他注意事项

1. 后端接口返回值都是JSON格式的,有的是JSON数组,有的是单个JSON元素。前端在接收后端返回过来的JSON文本后将其转换为JSON时需要小心这一点。

字符串转JSON数组后再遍历取值的方法:

字符串直接转为JSON对象进行取值的方法

 

2. 有时候有些操作需要调用多个接口,因为1个接口不够满足需求。

情况1:先调用接口A,接口A操作成功后才能调用接口B,有严格的先后关系

不需要创建2个子线程,在一个子线程里可以先后发送POST请求

 

情况2:接口A和接口B可以同时操作,没有先后关系

如下图所示,创建两个并列的线程,即可同时发送多个POST给不同的后端接口

 

分页接口,发送GET请求并设置header

video/list_hot为例来介绍,带有分页功能的后端接口的前端连接方法

 

postman中如何发送GET请求给这个接口?

 

点击SEND后返回过来的结果

 

AS里怎么发送GET请求呢?(详细代码可以看Recommendation_page.java文件)

1.先创建一个Runnable变量,因为我们需要下拉加载更多页面,就需要多次创建请求这个接口的线程(线程的生命周期到了后不能再次被执行,所以只能通过多次创建线程来重复调用同一个方法,为了方便,把线程要执行的Runnable用一个变量存起来)

2.Runnable,首先先写try语句,因为是网络请求,不一定成功的

 

3.如下图所示写网络请求代码,完成Runnable

 

4.创建线程

先创建2个全局变量

 

在页面刚刚被加载的时候马上执行一个线程,先把第一页显示出来

 

在前端触发下拉到底的事件时创建请求线程,先对当前显示的页码++,然后再执行线程。

 

主页

浙ICP备 18034075   浙公网安备 33011802001497

想放松i