美文网首页
Retrofit扫盲

Retrofit扫盲

作者: 初心一点 | 来源:发表于2019-01-17 22:04 被阅读8次

    Retrofit是什么

    • 官方解释:A type-safe HTTP client for Android and Java。说人话就是网络请求的一个封装库。
    • 竟然你搜到了这篇文章,那说明至少你大概知道他是干撒的了,就类似google开发的volley库。

    Retrofit优势

    • 与市面上那么多网络请求库相比,它的优势是使用简单,越用越觉得好用(大家都这么说;)),谁用谁知道:)

    Retrofit怎么用

    • (接下来说下步骤,先不用全都懂,知道怎么用了,在去分析不懂的知识点)
    1. 第一步当然是导库,在app/build.gradle文件中
    // 这个不必说
    api 'com.squareup.retrofit2:retrofit:2.2.0'
    // 这个是Retrofit底层需要用的okhttp
    api 'com.squareup.okhttp3:okhttp:3.3.1'
    // 这个是一种数据转化器,有多种可选
    api 'com.squareup.retrofit2:converter-gson:2.1.0'
    
    1. 创建接口类(来的有点直接,先装不懂哈)
    // 正式项目中,就是一个个接口调用方法
    // 有么有注意到这个对象:ResponseBody,一般开发中,我们需要将服务端返回的数据转化成实体对象,哪这里就直接替换为我们定义好的对象即可
    // 如果不需要转换Json数据,可以直接返回ResponseBody
    // 若需要转换,例如:Call<GsonBean> get***;这样的话,需要添加Gson转换器处理json转换成对象的操作
    
    public interface ApiStores {
    
        @GET("toutiao/index?")
        Call<ResponseBody> getDemoNews(@QueryMap Map<String, String> params);
        
        /**
         * @param params Get请求,带多个参数的接口
         * @return
         */
        @GET("toutiao/index?")
        Call<NewsBack> getNews(@QueryMap Map<String, String> params);
    
        /**
         * @param type Get请求,带一个参数的接口,当然这个跟上一个方法是一样效果,我写在这里是为了便于初学者明白一个参数写法
         * @return
         */
        @GET("toutiao/index?key=93ed89ccb2c409d1edad583eac67733c")
        Call<NewsBack> getNews(@Query("type") String type);
    
    }
    
    1. 定义好第二步的接口后,接下来来看如何调用
        Retrofit retrofit = new Retrofit.Builder()
        // Base URL: 总是以/结尾
        // 这里以聚合数据服务来举例
        .baseUrl("http://v.juhe.cn/")
        // 这里添加json转对象的转换器
        .addConverterFactory(GsonConverterFactory.create())
        .build();
    
        ApiStores apiStores = retrofit.create(ApiStores.class);
        // 添加参数
        HashMap<String, String> params = new HashMap<>();
        params.put("type", "top");
        params.put("key", "93ed89ccb2c409d1edad583eac67733c");
        Call<NewsBack> call = apiStores.getNews(params);
        // 开启异步请求,注意还有同步请求的功能提供
        call.enqueue(new Callback<NewsBack>() {
                @Override
                public void onResponse(Call<NewsBack> call, retrofit2.Response<NewsBack> response) {
                    NewsBack back = response.body();
                    // 这段代码可忽略,实际情况回调进行数据处理刷新UI即可
                    if (iCallBackListener != null) {
                        iCallBackListener.callBack(back);
                    }
                }
    
                @Override
                public void onFailure(Call<NewsBack> call, Throwable t) {
    
                }
        });
    
    1. 其实走完上面3步,程序员拿走主意应该算是告一段落,基本上网络数据算是走完流程

    其实Retrofit的好用远远不止使用简单这一层。可以衍生的点

    • 5.1 结合Rxjava让网络请求更优雅
    • 5.2 可以选最有转化器,例如:Jackson、Protobuf等,让网络请求效率更高
    • 5.3 添加各种拦截器,让网络请求更顺畅,交互更人性化
      等等

    参考链接

    1. http://square.github.io/retrofit/
    2. http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1016/3588.html
    3. http://wuxiaolong.me/2016/01/15/retrofit/
    4. http://bxbxbai.github.io/2015/12/13/retrofit2/

    相关文章

      网友评论

          本文标题:Retrofit扫盲

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