OKHttp通信使用

Posted xiaoleiacm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OKHttp通信使用相关的知识,希望对你有一定的参考价值。


以下代码摘自GitHub:https://github.com/square/okhttp/wiki/Recipes

设置缓存:

OKHTTP使用时通常会先设置缓存大小:

 private final OkHttpClient client;

  public CacheResponse(File cacheDirectory) throws Exception 
    int cacheSize = 10 * 1024 * 1024; // 10 MiB
    Cache cache = new Cache(cacheDirectory, cacheSize);

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

  public void run() throws Exception 
    Request request = new Request.Builder()
        .url("http://publicobject.com/helloworld.txt")
        .build();

    Response response1 = client.newCall(request).execute();
    if (!response1.isSuccessful()) throw new IOException("Unexpected code " + response1);

    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();
    if (!response2.isSuccessful()) throw new IOException("Unexpected code " + response2);

    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());

    System.out.println("Response 2 equals Response 1? " + response1Body.equals(response2Body));
  

缓存的持续时间通常在请求头(Header中进行设置) che-Control: max-stale=3600

超时设置:

OKHTTP超时时间设置:

/**
 * Created by admin on 2016/6/14.
 */
public class TimeOutClass 
    private OkHttpClient client;

    public void ConfigureTimeoutss() throws Exception 
        client = new OkHttpClient.Builder()
                .connectTimeout(3, TimeUnit.SECONDS)
                .writeTimeout(3, TimeUnit.SECONDS)
                .readTimeout(3, TimeUnit.SECONDS)
                .build();
    

    public void run() throws Exception 
        Request request = new Request.Builder()
                .url("http://httpbin.org/delay/2") // This URL is served with a 2 second delay.
                .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 completed: " + response);
            
        );

    


取消请求:

取消一个请求设置:

public class CanclelingClass 
    private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
    private final OkHttpClient client = new OkHttpClient();

    public void run() throws Exception 
        Request request = new Request.Builder()
                .url("http://httpbin.org/delay/2") // This URL is served with a 2 second delay.
                .build();

        final long startNanos = System.nanoTime();
        final Call call = client.newCall(request);

        // Schedule a job to cancel the call in 1 second.
        executor.schedule(new Runnable() 
            @Override
            public void run() 
                System.out.printf("%.2f Canceling call.%n", (System.nanoTime() - startNanos) / 1e9f);
                call.cancel();
                System.out.printf("%.2f Canceled call.%n", (System.nanoTime() - startNanos) / 1e9f);
            
        , 1, TimeUnit.SECONDS);

        try 
            System.out.printf("%.2f Executing call.%n", (System.nanoTime() - startNanos) / 1e9f);
            Response response = call.execute();
            System.out.printf("%.2f Call was expected to fail, but completed: %s%n",
                    (System.nanoTime() - startNanos) / 1e9f, response);
         catch (IOException e) 
            System.out.printf("%.2f Call failed as expected: %s%n",
                    (System.nanoTime() - startNanos) / 1e9f, e);
        
    


独立请求设置:

由于在一套程序中只能声明一个OkHttpClient()实例,如果要更改连接超时时间,或者其他参数可使用newBuilder进行设置。

/**
 * Created by admin on 2016/6/15.
 */
public class PreRequestClass 
    private final OkHttpClient client = new OkHttpClient();

    public void run() throws Exception 
        Request request = new Request.Builder()
                .url("http://httpbin.org/delay/1") // This URL is served with a 1 second delay.
                .build();


        // Copy to customize OkHttp for this request.
        OkHttpClient copy = client.newBuilder()
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .build();

        copy.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 1 succeeded: " + response);
            
        );


        OkHttpClient copy2 = client.newBuilder()
                .readTimeout(3000, TimeUnit.MILLISECONDS)
                .build();

        copy2.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 2 succeeded: " + response);
            
        );
    





以上是关于OKHttp通信使用的主要内容,如果未能解决你的问题,请参考以下文章

OKHttp通信使用

OKHttp通信使用

OKHTTP通信使用HTTPS

OKHTTP通信使用HTTPS

Android网络请求框架之Okhttp3.0 详细使用

Android网络请求框架之Okhttp3.0 详细使用