Okhttp的简单使用

976 阅读3分钟

okhtttp优势

1.允许连接到同一个主机地址的所有请求,提高请求效率 
2.共享Socket,减少对服务器的请求次数 
3.通过连接池,减少了请求延迟  
4.缓存响应数据来减少重复的网络请求 
5.减少了对数据流量的消耗  
6.自动处理GZip压缩

okhttp使用功能

get,post请求 
文件的上传下载  
加载图片(内部会图片大小自动压缩)  
支持请求回调,直接返回对象、对象集合  
支持session的保持

okhttp 操作步骤

  1. 导入依赖包: implementation 'com.squareup.okhttp3:okhttp:3.12.1' debugImplementation 'com.squareup.okhttp3:logging-interceptor:3.12.1

2.添加权限:<uses-permission android:name="android.permission.INTERNET" /> 3.创建一个包util

4.创建一个OkhttpHelper来请求GetRequest是OKHttp访问的请求,有两个请求参数,请求参数url和回调参数Callback,(1)Get的请求参数都在url上,(2)get的请求方式,(3)build进行创建, client进行封装。

public class OkhttpHelper {
    public static void getRequest(String url, Callback callback){
        OkHttpClient client=new OkHttpClient();
        Request request=new Request.Builder()
                .url(url)
                .get()
                .build();
        client.newCall(request).enqueue(callback);
    }
    }

2.在TestOkhttpActivity进行调用,先定义一个方法initRequest(); 使用工具方法调用一个类,第一个传url,第二个传callback的对象, 进行封装实现

public class TestOkhttpActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.okhttp_activity_main);
        initRequest();
    }
    private void initRequest() {
        String url ="https://wanandroid.com/wenda/comments/14500/json";
        OkhttpHelper.getRequest(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.i("111111","onFailure:"+e.getMessage());
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("111111","onResponse:"+response.body().string());
            }
        });
    }
    }

OKHttp同步和异步 1.1、同步 同步请求是指在请求发起到拿到响应结果之前,程序一直会处于不流畅的状态,无法接收新的请求,直至拿到响应 同步请求的好处在于:理解简单;实现简单;可以将响应结果返回做后续处理; 同步请求的缺点在于:不能支持高并发的情况,在对请求响应实时性要求不高的场景下,会影响性能 1.2、异步 异步请求是指请求发起后到拿到响应结果之前,程序是非阻塞状态,可以继续接收新的请求,响应回来时会调用一个回调处理响应数据 异步请求的好处在于:支持高并发的接口请求 异步请求的缺点在于:实现复杂;响应结果只能输出,不能返回,不利于接口的后续处理

Okhttp同步 同步请求是指在请求发起到拿到响应结果之前,程序一直会处于不,无法接收新的请求,直至拿到响应。

OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
        Request request = new Request.Builder().url("http://www.baidu.com")
                .get().build();
        Call call = client.newCall(request);
        try {
            Response response = call.execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }

创建OkHttpClient和Request对象,两者均使用了Builder模式;然后将Request封装成Call对象,然后调用Call的execute()同步发送请求,最后打印响应。

Okhttp异步 异步请求是指请求发起后到拿到响应结果之前,程序是非阻塞状态,可以继续接收新的请求,响应回来时会调用一个回调处理响应数据。

OkHttpClient client = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build();
       Request request = new Request.Builder().url("http://www.baidu.com")
               .get().build();
       Call call = client.newCall(request);
       call.enqueue(new Callback() {
           @Override
           public void onFailure(Call call, IOException e) {
               System.out.println("Fail");
           }
 
           @Override
           public void onResponse(Call call, Response response) throws IOException {
 
               System.out.println(response.body().string());
 
           }
       });

同样是创建OkHttpClient、Request和Call,只是调用了enqueue方法并在回调中处理响应。