OKhttp简单使用

简单说一下学习okhttp的理由

  1. google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp
  2. 高效的使用HTTP,使应用运行更快更省流量
  3. 响应缓存数据避免重复网络请求
  4. 无缝的支持GZIP来减少数据流量
  5. 使用非常简单,请求和响应的Api具有流畅的建造和不变性,同时支持同步异步调用回调函数
  6. 如果网络出现问题,它会从常见的连接问题中恢复
  7. 如果服务器配置有多个IP地址,当第一个IP连接失败,它会尝试连接下一个IP

以上是okhttp官网http://square.github.io/okhttp/以及结合网上的一些理解整理出来的,看到有不对的地方还望大家多多指出

下面我们就开始学习怎么使用okhttp吧

配置环境

github地址:https://github.com/square/okhttp

在builde.gradle里面添加上

compile 'com.squareup.okhttp3:okhttp:3.4.1'

在AndroidManifest.xml添加所需权限

<uses-permission android:name="android.permission.INTERNET" />

基本使用

  • get异步请求

通过get请求获取指定URL网页请求,这里要注意的是Android4.0以后需要在非主线程里使用。

private OkHttpClient client = new OkHttpClient();
public static void get(){
        //创建一个Request
        Request request = new Request.Builder()
                .url("http://www.jianshu.com/")
                .get()
                .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{
                //请求成功回调
                Log.e("okHttp","get="+response.body().string());
            }
        });
    }
  • post异步请求
    private OkHttpClient client = new OkHttpClient();
    public static void post(){
        //创建Form表单对象,可以add多个键值队
        FormBody formBody = new FormBody.Builder()
                .add("param","value")
                .add("param","value")
                .build();
        //创建一个Request
        Request request = new Request.Builder()
                .url("http://www.jianshu.com/")
                .post(formBody)
                .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{
                Log.e("okHttp","post="+response.body().string());
            }
        });
    }
  • 同步请求

client.newCall(request).enqueue(new Callback())改成
client.newCall(request).execute().body().string()即可

  • 文件上传与多文件上传
    public static void upload(){
        //多个文件集合
        List<File> list = new ArrayList<>();
        MultipartBody.Builder builder = new MultipartBody.Builder();
        //设置为表单类型
        builder.setType(MultipartBody.FORM);
        //添加表单键值
        builder.addFormDataPart("param","value");
        for (File file : list) {
            //添加多个文件
            RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
            builder.addFormDataPart("files", file.getName(), fileBody);
        }
        Request request = new Request.Builder()
                .url("http://192.168.1.8/upload/UploadServlet")
                .post(builder.build())
                .build();
        //发起异步请求,并加入回调
        mOkHttpClient.newCall(request).enqueue(new Callback()
        {
            @Override
            public void onFailure(Call call,IOException e){
            }
            @Override
            public void onResponse(Call call,Response response) throws IOException{
                Log.e("okHttp","updLoad="+response.body().string());
            }
        });
    }
  • 超时设置,整个程序应使用这一个mOkHttpClient对象
    public static void setTimeout(){
        mOkHttpClient.newBuilder()
                .connectTimeout(10, TimeUnit.SECONDS)//10秒连接超时
                .writeTimeout(10, TimeUnit.SECONDS)//10m秒写入超时
                .readTimeout(10, TimeUnit.SECONDS)//10秒读取超时
                .build();
    }
  • 文件下载
    其实很简单,只需要利用get同步或异步请求,然后通过
    client.newCall(request).execute().body().byteStream()
    获取InputStream输入流,写文件操作即可实现文件下载。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值