用到的模块
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()}}