OKhttp使用

来源:互联网 发布:淘宝开店审核多久 编辑:程序博客网 时间:2024/05/06 15:55

之前就听说OKhttp很火,后面自己参考了一些资料学习了一下,最后又学了看了Retrofit的使用,并且还用在了现在的项目中,最后个人感觉Retrofit确实感觉比较正式,高度解耦,适合大型且后台接口稳定(不能频繁更换接口)很多人维护的项目,在一些小项目中使用反而增加了麻烦程度,所以今天特地总结一些OKhttp的使用。

添加依赖: compile ‘com.squareup.okhttp3:okhttp:3.4.1’ okhttp

下面代码片段中有一段是写在Application中的,在实际项目中也是这样用的,只需要实例化一次,而且加了缓存功能

 okc = new OkHttpClient                .Builder()                .connectTimeout(5, TimeUnit.SECONDS)                .cache(new Cache("缓存的地址","缓存的大小"))                .build();

同步GET请求

  Request rest = new Request.Builder().get().url(my_url).build();        MyAppclition.okc.newCall(rest).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                /**子线程*/                Log.e("tag", "是否在主线程" + isMainThread());                Log.e("tag", "异步" + response.body().string());//拿到JSON                //response.body().byteStream()  可以拿到输入数据流            }        });

异步GET请求

  new Thread(new Runnable() {            @Override            public void run() {                try {                    Request yibu = new Request.Builder().get().url(my_url).build();                    Response execute = MyAppclition.okc.newCall(yibu).execute();                    /**子线程*/                    Log.e("tag_yibu", execute.body().string());                    Log.e("tag_yibu", "是否在主线程" + isMainThread());                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();

post

        RequestBody builder = new FormBody.Builder().add("market","SH").build();        Request pos = new Request.Builder().post(builder).url("http://gk.cdtzb.com/api/product/stockList").build();        MyAppclition.okc.newCall(pos).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                /**子线程*/                Log.e("tag_post", "是否在主线程" + isMainThread());                Log.e("tag_post", "异步" + response.body().string());//拿到JSON                //response.body().byteStream()  可以拿到输入数据流            }        });

大家看到了其实如果用原生的方式确实挺麻烦的,如果以后有时间可以自己研究封装一下更方便,下面再介绍一个别人封装好的
github:https://github.com/hongyangAndroid/okhttputils
有很详细的使用介绍

0 0
原创粉丝点击