AI智能
改变未来

创新实训博客(15)——Android开发中Kotlin与后端的接口交互


用到的模块

okhttp

Call——同步请求

同步请求就是执行请求的操作是阻塞式,直到 HTTP 响应返回。

它对应 OKHTTP 中的 execute 方法。

Call——异步请求

异步请求就类似于非阻塞式的请求,它的执行结果一般都是通过接口回调的方式告知调用者。

它对应 OKHTTP 中的 enqueue 方法。

Dispatcher

对于同步调用,需要带上自己的线程,并负责管理发出的同时请求数量。 同时连接过多会浪费资源。 太少会损害延迟。

对于异步调用,Dispatcher实现最大并发请求的策略。 可以设置每个Web服务器的请求线程的最大值(默认为5)和服务器最大值(默认为64)。

向后端发get请求

不需要加.get

当然加上也行

[code]OkHttpClient client = new OkHttpClient();String run(String url) throws IOException {Request request = new Request.Builder().url(url).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}}

向后端发post请求

首先需要设置好类型

然后再添加.post参数,向后端发起post请求

[code]public static final MediaType JSON= MediaType.get(\"application/json; charset=utf-8\");OkHttpClient client = new OkHttpClient();String post(String url, String json) throws IOException {RequestBody body = RequestBody.create(json, JSON);Request request = new Request.Builder().url(url).post(body).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}}

处理返回的参数

以异步的请求为例子:

在onResponse回调函数中进行处理。

我这里首先判断返回状态是不是200(代表成功),然后把即将在view中显示的数据保存下来,然后使用handler,让主线程设置view组件。

因为,在Android中,不允许子线程操作view组件,也就是在okhttp请求中,必须要调用主线程来实现视图层的更新。

[code]override fun onResponse(call: Call, response: Response) {val resobj = JSON.parseObject(response.body!!.string())if (resobj[\"code\"] == 200) {// 获取成功item = JSON.parseObject(resobj[\"data\"].toString())val message = Message()message.what = 1handler.sendMessage(message)} else {// 获取失败提示信息Looper.prepare()Toast.makeText(this@BlogActivity,resobj[\"code\"].toString() + \"-\" + resobj[\"msg\"].toString(),Toast.LENGTH_SHORT).show()Looper.loop()}}

完成的显示效果

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 创新实训博客(15)——Android开发中Kotlin与后端的接口交互