您的位置:首页 > 移动开发 > Android开发

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

2020-07-14 06:21 721 查看

用到的模块

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 = 1
handler.sendMessage(message)

} else {
// 获取失败提示信息
Looper.prepare()
Toast.makeText(
this@BlogActivity,
resobj["code"].toString() + "-" + resobj["msg"].toString(),
Toast.LENGTH_SHORT
).show()
Looper.loop()
}
}

完成的显示效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐