OkHttp3 简单介绍(一)

来源:互联网 发布:apm性能监控 java 编辑:程序博客网 时间:2024/06/09 17:46

学习编程1年多了,这是我的第一篇博客。很早之前就有写博客的想法,无奈粮食储备不足,不能供大家使用。所以一直在做一名资深的“嫖客”。。。。。

最近在学习框架的知识,所以就对OkHttp3框架学习了一下(听说对于网络请求而言还是相当不错的),虽然现在Retrofit框架非常流行,几乎替代了OkHttp3,但是既然是学习框架,学习一下OkHttp3也是不错的(触类旁通嘛!)。

这里先跟大家说一下OkHttp3的好处:具有更好的同步异步请求、缓存机制,支持HttpDNS、重定向、Gzip压缩,平台适应性、很好的服务器IP的转换、直接Socket通信,支持拦截器等等。

看到这么多机制,是不是觉得很强大,通过Socket直接通信,以及很好的缓存机制,Gzip对于Http头部的压缩传输。自然对于网络请求这块使应用更加省流量、请求的更快。OkHttp对于Https和HttpDNS的支持,使得应用的网络通信安全性更高。当然说了它的好,现在也来说说它的
不好之处

OkHttp不支持优先级请求
OkHttp不支持自签名证书
OkHttp header中不能传中文
虽然是不好的地方,但是OkHttp已经比较成熟了,网上解决这几个问题的资料也很多了。所以这些都不是问题。

接下来,我会为大家介绍以下几点内容:

1、OkHttp3简单使用及代码注解
2、OkHttp3常用类的简单介绍

写权限<uses-permission android:name="android.permission.INTERNET"/>引用相关的依赖:dependencies {    compile 'com.squareup.okhttp3:okhttp:3.2.0'    compile 'com.squareup.okio:okio:1.7.0'}

(一 、基本请求方式GET POST)
既然是网路请求,当然少不了对GET和POST两种请求方式的介绍,在OkHttp3中GET同步请求的代码如下:

    OkHttpClient client = new       OkHttpClient().newBuilder().build(); //通过Builer模式实例化OkHttpClient    Request request = new Request.Builder().url("https://www.publicobject.com/helloworld.txt").build();//这里是请求    try {     Response  response = client.newCall(request).execute();//这里是用到的同步执行            Log.e("TAG", "响应体:"+response.body().string());        } catch (IOException e) {            e.printStackTrace();        }

在以上代码中我们首先通过Builder实例化了一个OkHttpClient对象
,然后实例化请求对象Request,在这里为url赋值时必须的,不然会报 java.lang.IllegalStateException: url == null。最后就是client同步执行resquest得到响应体Response(接下来会讲这个类的用途)

GET异步执行:

        OkHttpClient client = new OkHttpClient().newBuilder().build();        Request request = new Request.Builder()。url("https://www.publicobject.com/helloworld.txt").build();        client.newCall(request).enqueue(new Callback() {                @Override                public void onFailure(Call call, IOException e) {                    Log.e("TAG", "没有得到响应体,连接失败!");                }                @Override                public void onResponse(Call call, Response response) throws IOException {                    Log.e("TAG", "成功得到响应体:"+response.body().string());                }            });

我们可以看到就是将execute()方法换成enqueue(Callback callback),然后再匿名内部类里的方法,写得没得到响应体后的逻辑。

POST携带参数请求,参数写请求体中,这里我们会讲构建字符串,字节,表单请求体,分块表单请求体。

public static final String TEXT = MediaType.parse("text/plain,charset = utf-8");public static final String STREAM = MediaType.parse("application/octet-stream");//构建字符串请求体RequsetBody rb1 = RequestBody.create(TEXT, string);//构建字节请求体ReuqestBody rb2 = RequestBody.create(STREAM, byte); //构建文件请求体RequestBody rb3 = ReqestBody.create(STREAM, file);//构建表单请求体ReuqestBody formBody = new FormBody.Budiler().add("name", "老头儿");.add("age",  "22")....build();//构建分块表单请求体RequestBody multipartBody = new MultipartBody.builder().setType(MultiPartBody.FORM);//指明为multiPart/form-data类型.addFormDataBody("name", "老婆儿").addFormDataBody("age", "22").addFormDataBody("sex", "女").addFormDataBody("updownFile", "text.txt", RequestBody.create(STREAM, file))//updownFile为表单名字,text.txt为上传的文件名,RequestBody是上传的文件。....build();Request request = new Request.Builder().post(rbX)//指定为Post请求方式的时候必须设置请求体.url(url).build();client.newCall(request).execute()/enqueue(CallBack callback)//执行请求体

如果你对请求头,请求行,请求体,响应头,响应体,响应行不熟悉,看这篇博客http://www.jianshu.com/p/e544b7a76dac
POST请求的同步异步用GET这里就不再赘述。

(二 常用类的简单介绍)
Address 地址类 主要就是配置网络请求的相关参数。
Authenticator 类 身份验证器,主要用于判断客户端访问服务器的时候是否释放权限。
cache 类 缓存器类 主要用于缓存Reponse数据,减缓服务器压力。加快访问速度。
Call 类,执行类,通过client.newCall(request)初始化,选择异步还是同步执行就是通过这个类来决策的。
CallBack 类 执行回调类 主要用于异步执行后的回调。
Cookie 蛋糕类,主要用于保存用户的信息,存在客户端,与Seesion会话类对应。
Dispatcher 分配器类 主要用于将执行体存在双端列表中,按规则执行。
限于篇幅限制,这里先介绍这几个,在下章我会继续介绍其他几个的。

原创粉丝点击