Android OkHttp的封装类OkGo的用法

作者: 侯蛋蛋_ | 来源:发表于2017-10-25 15:24 被阅读0次

    本节前言

    前面讲述了运行更快、节省流量等多个优势OkHttp,虽然他的优势特别多,但是使用起来也是比较麻烦的,就比如获取个图片都要写很长一段代码,所以今天我们就来讲一下OkGo,基于okhhttp的封装类,你会发现他真的比okhttp简单的多

    关于使用

    其实github库有详细的介绍,这里就讲解一下他的基本使用,介绍上一篇okhttp的功能讲解

    • 一般的get请求
    • 一般的post请求
    • 基于Http的文件上传
    • 文件下载
    • 加载图片
    • 支持请求回调,直接返回对象、对象集合
    • 支持session的保持

    第一步添加依赖

    //必须使用
    compile 'com.lzy.net:okgo:3.0.4'
    
    //以下三个选择添加,okrx和okrx2不能同时使用
    compile 'com.lzy.net:okrx:1.0.2' //Rxjava
    compile 'com.lzy.net:okrx2:2.0.2'  //Rxjava2
    compile 'com.lzy.net:okserver:2.0.5'//下载管理和上传管理
    

    这里只讲解okgo的用法,其他可以看官网的详细介绍

    第二步初始化

    最简配置

    OkGo.getInstance().init(this);
    

    这样写是使用OkGO内部默认初始化的OkHttpClient来进行网络请求,包含了基本的log打印,超时时间和https相关的配置,但是建议还是自己配置好OkHttpClient传给OkGo比较好,详细自定义OkHttpClient的方法就是配置原生的okhttp的方法,建议的一些配置如下,都是可选的,如果需要你就加,不需要就别加了。

    就需要两部,关于其他配置详细看官网介绍

    okgo的基本使用

    无论做什么请求,第一行的泛型一定要加!!!,ServerModel的泛型,就是上图的请求一大堆
    基本请求请往下看

    一、一般的get请求

     OkGo.<String>get("http://www.baidu.com")
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(Response<String> response) {
                        String body = response.body();
                        System.out.println(body);
                    }
    
                });
    

    运行结果

    Response对象介绍

    先看Response对象内部的字段:

    该对象一共有5个字段,分别表示以下意思:

    • body:当前返回的数据,T即为数据的泛型。使用方法body()获取该值。如果请求成功,回onSuccess(),该字段为convertResponse()解析数据后返回的数据。如果发生异常,回调onError(),该字段值为null。

    • throwable:如果发生异常,回调onError(),该字段保存了当前的异常信息。如果请求成功,回调onSuccess(),该字段为null。使用方法getException()获取该值。

    • isFromCache:表示当前的数据是来自哪里,true:来自缓存,false:来自网络。使用方法isFromCache()获取该值。

    • rawCall:表示当前请求的真正okhttp3.Call对象。使用方法getRawCall()获取该值。

    • rawResponse:表示当前请求服务端真正返回的okhttp3.Response对象,注意:如果数据来自缓存,该对象为null,如果来自网络,该对象才有值。使用方法getRawResponse()获取该值。

    另外,该对象还有以下几个方法:

    • code():http协议的响应状态码,如果数据来自网络,无论成功失败,该值都为真实的响应码,如果数据来自缓存,该值一直为-1。

    • message():http协议对响应状态码的描述信息,如果数据来自网络,无论成功失败,该值都为真实的描述信息,如果数据来自缓存,该值一直为null。

    • headers():服务端返回的响应头信息,如果数据来自网络,无论成功失败,该值都为真实的头信息,如果数据来自缓存,该值一直为null。

    • isSuccessful():本次请求是否成功,判断依据是是否发生了异常。

    二、一般的post请求

    post和get请求是一样的,只不过上面的get换成了post,这里我们就讲解一下用户的登录

    get请求连接如下

    http://192.168.56.1:8080/LoginServlet?username=abc&password=123
    

    post请求连接如下

    OkGo.<String>post("http://192.168.56.1:8080/LoginServle")
                    .params("username","abc")
                    .params("password","123")
                .execute(new StringCallback() {
                    @Override
                    public void onSuccess(Response<String> response) {
                        String body = response.body();
                        System.out.println(body);
                    }
    
                });
    

    三、文件上传

    string文本

    JSON文本

    文件上传

    四、文件下载

    Paste_Image.png

    五、加载图片

    OkGo.getInstance().init(getApplication());
            OkGo.<Bitmap>post("http://image.uczzd.cn/7402592950813081745.jpg?id=0&from=export")
                    .tag(this)
                    .execute(new BitmapCallback() {
                        @Override
                        public void onSuccess(Response<Bitmap> response) {
                            Bitmap body = response.body();
                            iv.setImageBitmap(body);
                        }
                    });
    

    运行结果

    相关文章

      网友评论

        本文标题:Android OkHttp的封装类OkGo的用法

        本文链接:https://www.haomeiwen.com/subject/atwfpxtx.html