OkHttpClient,cache缓存,拦截器_okhttpclient cache_meng_c_的博客-程序员宅基地

导入okhttp依赖

compile 'com.squareup.okhttp3:okhttp:3.9.0'
MainActivity里面



public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //get();
       // post();
        //postString();
        //form();
       // multipartBody();....
        cache();//缓存
        //perCall();
    }



    public void get(){

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient.Builder()
                            //  .addInterceptor(new LoggingInterceptor())
                            .addNetworkInterceptor(new LoggingInterceptor())
                            .build();

                    Request request = new Request.Builder()
                            .url("http://publicobject.com/helloworld.txt")
                            .build();

                    Call call = client.newCall(request);

                    Response response = call.execute();

                    if(response.isSuccessful()){
                        //返回的数据是 android okhttp机器人图案
                        System.out.println("response = " + response.body().string());
                    }


                } catch (Exception e) {
                    e.printStackTrace();
                }


            }
        }).start();

    }

    //post
    private void post(){
        OkHttpClient client = new OkHttpClient();
        String s = Build.BRAND + "/" + Build.MODEL + "/"+Build.VERSION.RELEASE;

        Request request = new Request.Builder()
                .url("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
                .addHeader("User-Agent",""+s)
                .build();

        Call call = client.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                //输出异常
                System.out.println("e ="+e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //输出 请求到的数据
                System.out.println("response.body().string() = " + response.body().string());

            }
        });
 }


    public static final MediaType MEDIA_TYPE_MARKDOWN
            = MediaType.parse("text/x-markdown; charset=utf-8");
    public void postString(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();

                    String postBody = ""
                            + "Releases\n"
                            + "--------\n"
                            + "\n"
                            + " * _1.0_ May 6, 2013\n"
                            + " * _1.1_ June 15, 2013\n"
                            + " * _1.2_ August 11, 2013\n";

                    Request request = new Request.Builder()
                            .url("https://api.github.com/markdown/raw")
                            .post(RequestBody.create(MEDIA_TYPE_MARKDOWN,postBody))
                            .build();

                    Response response = client.newCall(request).execute();
                    if(response.isSuccessful()){
                        //返回一堆 网页的布局 h2
                        System.out.println(response.body().string());
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    public void form(){
        //表单 post请求 携带参数
        RequestBody requestBody = new FormBody.Builder()
                .add("search","Jurassic Park")
                .build();

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url("https://en.wikipedia.org/w/index.php")
                .post(requestBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                System.out.println(response.body().string());
            }
        });

 }

    public static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
    public void multipartBody() {
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("key","Value")
                .addFormDataPart("key","filename",RequestBody.create(MEDIA_TYPE_PNG,new File("")))
                .build();

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url("https://api.imgur.com/3/image")
                .post(requestBody)
                .build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                System.out.println(response.body().string());
            }
        });

 }
    public void cache() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                Cache cache = new Cache(getCacheDir(), 10 * 1024 * 1024);

                OkHttpClient client = new OkHttpClient.Builder()
                        .cache(cache)
                        .build();

                Request request = new Request.Builder()
                        .url("http://publicobject.com/helloworld.txt")
                        .cacheControl(CacheControl.FORCE_NETWORK)//强制走网络
                        .build();


                    Response response1 = client.newCall(request).execute();

                    String response1Body = response1.body().string();

                    System.out.println("Response 1 response:          " + response1);
                    System.out.println("Response 1 cache response:    " + response1.cacheResponse());
                    System.out.println("Response 1 network response:  " + response1.networkResponse());


                    Response response2 = client.newCall(request).execute();
                    String response2Body = response2.body().string();

                    System.out.println("Response 2 response:          " + response2);
                    System.out.println("Response 2 cache response:    " + response2.cacheResponse());
                    System.out.println("Response 2 network response:  " + response2.networkResponse());



                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }

    OkHttpClient client = new OkHttpClient();

    public void perCall(){
        Request request = new Request.Builder()
                .url("https://en.wikipedia.org/w/index.php")
                .build();

        OkHttpClient okHttpClient1 = client.newBuilder().writeTimeout(10, TimeUnit.SECONDS).build();
        OkHttpClient okHttpClient2 = client.newBuilder().writeTimeout(20,TimeUnit.SECONDS).build();
    }

}
拦截器
public class LoggingInterceptor implements Interceptor{
    @Override
    //重写的方法
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();

        long t1 = System.nanoTime();
        //logger.info(String.format("Sending request %s on %s%n%s",
        // request.url(), chain.connection(), request.headers()));

        Response response = chain.proceed(request);

        long t2 = System.nanoTime();
       // logger.info(String.format("Received response for %s in %.1fms%n%s",
       // response.request().url(), (t2 - t1) / 1e6d, response.headers()));
        System.out.println("t2 = " + (t2-t1));
        return response;

    }
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/thw_m/article/details/78494109

智能推荐

《Linux Device Drivers》第十六章 块设备驱动程序——note_blk_queue_end_tag_子曰小玖的博客-程序员宅基地

简介 一个块设备驱动程序主要通过传输固定大小的随机数据来访问设备 Linux内核视块设备为与字符设备相异的基本设备类型 Linux块设备驱动程序接口使得块设备可以发挥其最大的功效,但是其复杂程序又是编程者必须面对的一个问题 一个数据块指的是固定大小的数据,而大小的值由内核确定 数据块的大小通常是4096个字节,但是可以根据体系结构和所使用的文件系统进行改变 与数据块对应的是扇...

Vue中Class和Style几种v-bind绑定的用法-详解案例_JackieDYH的博客-程序员宅基地

项目开发中给元素添加/删除 class 是非常常见的行为之一, 例如网站导航都会给选中项添加一个 active 类用来区别选与未选中的样式,除了导航之外其他很多地方也都会用到这种方式处理选中与未选中。除了设置 class 我们在项目中也经常设置元素的内联样式 style,在 jquery 时代我们大多数都是利用 addClass 与 removeClass 结合使用来处理 class 的添加/删除,利用 css() 方法设置/获取元素的内联样式。那么在 vue 中 我们如何处理这类的效果呢?在 v.

tomcat 7如何配置线程池_"executor maxthreads=\"600\" minsparethreads=\"100_风在天空的博客-程序员宅基地

对webservice服务进行性能优化,必然要考虑java容器的多线程并发处理,在此,简单介绍一下如何在tomcat7中配置多线程。操作系统环境:linux redhat6java环境:jdk6容器环境:tomcat7进入apache-tomcat-7.0.55/conf路径,修改server.xml文件。注释如下的原始配置               conn

通过JVM获取相关的服务器信息 . _稻草人_xia的博客-程序员宅基地

http://blog.csdn.net/zgmzyr/article/details/6903500http://topmanopensource.iteye.com/blog/833386 在我们想监控我们的JVM状态的时候,除了可以通过JMX这类jvm提供的接口服务,还是可以自己通过程序来编写一些接口来获取服务器状态信息。以下代码我在jdk1.5.10版本上测试通过。...

Untiy中的数据平滑处理_cartzhang的博客-程序员宅基地

本文章由cartzhang编写,转载请注明出处。 所有权利保留。 文章链接:http://blog.csdn.net/cartzhang/article/details/50680237 作者:cartzhang数据平滑处理由于需要处理硬件的传给数据,硬件是其他商家的。 坑爹的是发送频率太低了,20HZ左右,也是服气了。好处有么,肯定是便宜。 这个用在VR游戏上,不做评论了。 既然这样,

关于Unity层级面板的自动初始化_dongfushu7972的博客-程序员宅基地

Transform[],GameObject[]这些class类型,Unity会进行自动初始化。但[ExecuteInEditMode]在编辑模式下执行的时候,会发现初始化其实也是有顺序的,并且在Update之后。这时候就会遇到等于NULL的情况。转载于:https://www.cnblogs.com/hont/p/4247940.html...

随便推点

HashMap的工作原理请介绍下?是线程安全的么?[中高]_xiangyuenacha的博客-程序员宅基地

一 底层的数据结构HashMap底层是用的哈希表,哈希表是由数组+链表组成。思考:哈希表有什么优势呢?数组数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么我们...

"Dependencies conflict "_nue的博客-程序员宅基地

<br />依赖关系冲突:Dependencies conflict ,报出的错误时很让人摸不到头脑的,一般都是这样的:cabal: dependenciesconflict: ghc-6.10.1 requires  “somepackagename” ==1.0.1.1 however <br />“somepackagename” was excluded because ghc-6.10.1 requires “somepackagename”==1.0.1.0 <br />这不是一会儿说需要这个一

安卓全局变量的使用_惜海的博客-程序员宅基地

Android用Application设置全局变量以及使用  如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。   首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候

资源分享(不限速)/如何分享自己的资源_xuchaoxin1375的博客-程序员宅基地

推荐使用蓝奏云生成文件链接来分享文件(文件夹):一般都够用(如果不超过100M大小)上传文件生成链接复制链接如果文件大小超过100M,可以考虑使用天翼云盘来分享推荐永久公开分享链接

JSON解析 Gson解析方式 JSONObject JSONArray_cc超人不会飞的博客-程序员宅基地

直接上代码主程序代码:package com.cc.mygson;import java.net.Proxy.Type;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.google.gson.Gson;import com.go

hdu 5177 (1e18范围的卡特兰数)_0<n<1e18_whai362的博客-程序员宅基地

hdu 5177 (1e18范围的卡特兰数)题意:求第n个卡特兰数,模3814697265625 (5^18)限制:有20组数据,1 思路:1. 卡特兰数的表达式:ans = 1/(n+1) * C(2*n,n)-> ans = 1/(n+1) * (2n)! / n! / n!    ---1式2. 因为要模5^18,求逆元要求互质,所以先把"