核心提示:在网络请求中,用原始的请求httpconnection请求会有很多要考虑的比如线程,流效率还有字符字节转换,这个时候我们可以使用框架,我们目前需要知道有什么联网的成熟框架,在最近两年中主要有okhtt...
在网络请求中,用原始的请求httpconnection请求会有很多要考虑的比如线程,流效率还有字符字节转换,这个时候我们可以使用框架,我们目前需要知道有什么联网的成熟框架,在最近两年中主要有okhttp,还有Retrofit.在总结下get请求很方便,参数直接放网址后面,post参数是通过流的方式传输的。数据格式有两种json和xml,json格式清晰轻便,xml量比较大,更多用json。请求网络类:httpUrlconnection,这个是java.net包提供的,说多了,现在来说下Okhttp。是一个轻量级的框架,看它的使用
一、Okhttp 首先要引入依赖库,当然库比较大,比较占资源open Modlesetting就可以找到了
1.用构建者模式构建一个客户端okhttpclient 的请求,先是new了一个OkhttpClient请求端,再用它生成一个请求
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url("https://route.showapi.com/213-4?showapi_appid=48962&topid=5&showapi_sign=9ad486a2461e47f4b3391171911f5b4b").build();
2.客户端去执行请求,客户端new一个call,这个是okhttp的异步请求,请求有一个回调callback。注意这个可以同时多次请求,两个也是可以的,都会通过下面的Callback返回
okHttpClient.newCall(request).enqueue(callback);
okHttpClient.newCall(request).enqueue(callback);
3.把这个回调写出来,同时在请求成功中可以进行拿到数据Response,但是这个是一个异步请求如果在子线程中修改Ui可能会报错,但是这一次没报错说不清楚,如果报了发个handler把
Callback callback = new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { TEX.setText(response.body().string()); } };
//这个是完整的okhttp异步请求的代码
public void okhttp() { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("https://route.showapi.com/213-4?showapi_appid=48962&topid=5&showapi_sign=9ad486a2461e47f4b3391171911f5b4b").build(); Callback callback = new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { TEX.setText(response.body().string()); } }; // Request equest=new Request.Builder().url(); okHttpClient.newCall(request).enqueue(callback); }