Android--OKHttpUtils基本使用
2017-11-27 本文已影响52人
ZebraWei
**版权声明:本文为小斑马伟原创文章,转载请注明出处!

OKHttpUtils:一个专注于让网络请求更简单的网络请求框架,对于任何形式的网络请求只需要一行代码。它是OKHttp的一次二次封装,封装的目的是让网络请求更加方便。
一、 OKHttpUtils优势
- 1.性能高,使用主流的okhttp的进行封装
OKHttp我们知道它支持http2和socket的重连。自动选择最好的路线,拥有自己维护socket维护的连接池。可以减少TCP的握手次数,同时它拥有队列线程池可以轻松的并发请求。 - 2.特有的网络缓存模式
OKHttpUtils是大多数网络框架不具备的,比如我们公司的网络老板要求不仅在有网的情况下,进行展示网络数据,在无网的情况下使用缓存数据。这时候我们使用普通网络请求,就需要大量的判断。当前是否有网和无网状态,根据不同的状态保存不同的数据。然后再决定是否使用缓存。但是这是一个通用的写法。于是OKHttpUtils使用自动网络缓存模式。让用户只关注数据处理。 - 3.方便易用的扩展接口
可以添加全局的公共参数、全局的拦截器、全局的超时时间,更可以对单个请求定制拦截器。请求参数修改等等。 - 4.强大的Cookie的保存策略
在客户端对Cookie的获取不是一个特别简单的事情,Cookie全程自动管理,并且提供了额外的Cookie管理方法,引入额外的自动管理中,添加任何你想创建的Cookie。
二、 OKHttpUtils引入
compile'com.lzy.net:okhttputils:1.8.1'
或者
compile'com.lzy.net:okhttputils:+'
三、OKHttpUtils配置
这个配置一般在Application,或者在基类中,用一次就可以了。
//进行全局的配置。
OkHttpUtils.init(this);
-
1.GET请求
OkHttpUtils.get("www.baidu.com") //请求方法和请求url .tag(this) //请求的tag 主要用于取消对应的请求 .cacheKey("cacheKey") //设置当前请求的缓存key,建议每个不同功能的请求设置一个 .cacheMode(CacheMode.DEFAULT) //缓存模式,详细请看缓存介绍 .execute(new MyCallback() { @Override public void onSuccess(RequestInfo requestInfo,Call call, Response response) { //请求成功 } });
-
2.POST请求-上传JSON字符串
OkHttpUtils.post("you url") .tag(this) .upJson("your json") .execute(new StringCallback() { @Override public void onSuccess(String s,Call call,Response response) { //请求成功 } });
四、OKHttpUtils回调
AbsCallback:所有回调的父类,抽象类
StringCallBack:如果返回值类型是纯文本数据,即可使用该回调
BitmapCallback:如果请求的是图片数据,则可以使用该回调
FileCallBack:如果要做文件下载,则必须使用该回调,内部封装了文件下载进度回调等方法。
我们也可以根据自己自定义自己CallBack。
五、OKHttpUtils同步请求
OKHttpUtils同步请求 不需要传进CallBack,也就是说调了这个方法后,没有CallBack就是同步请求,传了CallBack就是异步请求。
Response response = OkHttpUtils.get("http://www.baidu.com")
.tag(this)
.headers("header1","111")
.param("perams","222")
.execute();
OkHttpUtils取消请求
//根据Tag取消请求
OkHttpUtils.getInstance().cancelTag(this); //传入相应的tag标记。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.getBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
okHttpUtilsGET();
}
});
findViewById(R.id.postBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
okHttpUtilsPOST();
}
});
/**
* GET请求
*/
private void okHttpUtilsGET() {
OkHttpUtils.get("http://www.android.com")
.tag("get")
.cacheKey("getCacheKey")
.cacheMode(CacheMode.DEFAULT)
.execute(new StringCallback() {
@Override
public void onSuccess(String s, Call call, Response response) {
Log.i("test","")
}
});
}
/**
* POST请求
*/
private void okHttpUtilsPOST() {
OkHttpUtils.post("http://www.android.com")
.tag("get")
.cacheKey("getCacheKey")
.cacheMode(CacheMode.DEFAULT)
.params("key","value")
.params("fileName",new File(""))
.upJson("your json")
.execute(new StringCallback(){
@Override
public void onSuccess(String s, Call call, Response response) {
Log.i("test",s);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
OkHttpUtils.getInstance().cancelTag("get");
}
}