Retrofit扫盲

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/

猜你喜欢

转载自blog.csdn.net/weixin_34185364/article/details/87443287