Retrofit从源码解读基本用法

Retrofit从源码解读基本用法

核心内容

  • Retrofit2.0之后的版本使用
  • Retrofit的常用功能

详细介绍

  • 最简单的使用

  //创建Retrofit实例
  Retrofit retrofit = new Retrofit.Builder()
  //设定网络请求根接口,注意接口的规则已“/”结束
 .baseUrl("https://api.example.com/")
  //设置Gson解析
 .addConverterFactory(GsonConverterFactory.create())
 .build();
 //自定义的网络请求设置(主要是网络请求方法、传值)
 MyApi api = retrofit.create(MyApi.class);
 //获取根据接口返回的数据
 User user = api.getUser().execute();
  • 普通用法需要注意的问题

    • BaseUrl设置要特别注意baseUrl的结束“/”,一般推荐直接在baseUrl中添加,这也是平时些接口数据的习惯,因为这样可以在每个后续的拼接链接路径中都少写一个“/”,同时该类提供的Endpoint会很方便的添加到末尾
    • MyApi的代码其实类似下面这样:
    • public interface MyApi { @GET ("data/福利/{number}/{page}") Observable loadPage(@Path("number") int number, @Path("page") int page, @Query("q") String query); }
    • 而User是用来接受请求返回结果的数据模型,习惯称之为model,通常在AS中安装了GsonFormat插件,直接json数据传递到这个插件工具中就可以直接生成与json对应的数据类型。
    • 其中@Path和@Query都是往当前链接中添加字段,但是两者的添加方式不同@Path("number") int number和{number}连用,用number替代{number}的位置;而Query的方法则是直接在链接的后面拼接'/p = query';
    • 在解析方面GsonConverterFactory.create(),不是唯一的选择,你也可以选择FastJson
    • 而在返回数据方面Retrofit也提供了至少两种的Response#Result处理方式,第一种普通的回调Callback方式,说白了就是借口的方式;另一种则是联合RxJava&RxAndroid使用响应式编程的风格,因为个人偏好于第二种所以下面会给出一个Retrofit+RectiveX的一个例子;
  • Retrofit+RectiveX使用

    • 这种用法的跟基本用法的请求方式完全一样,只是在结果的处理方式上有所不同,这里采用的类似于观察者模式的
    • 普通的CallBack回调方式的处理结果,通常用的就是interface里面定义方法的方式,设置监听接受结果
    • 使用了RxJava和RxAndroid的方式可以借助该框架的强大功能来处理数据,如:控制请求在子线程,UI显示在主线程处理;再如:可以在请求中途对放回的结果进行重组,亦或是在一个接口请求完成的结果发起下一个接口的请求,而且全程都是链条式的结构,一行代码看起来逻辑请求简介.
    • 废话少说上代码:

 public void request() {
    swipeRefreshLayout.setRefreshing(true);
    //Create and Configure Retrofit
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://zhuangbi.info/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
    //Receiver response
    Observer> observer = new Observer>() {
        @Override
        public void onCompleted() {
            swipeRefreshLayout.setRefreshing(false);
        }

        @Override
        public void onError(Throwable e) {
            swipeRefreshLayout.setRefreshing(false);
            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNext(List zhuangbiImages) {
            recyclerView.setAdapter(new ZhuangBiAdatper(zhuangbiImages));
        }
    };
    //Send request and Configure network params
    NetWorkInterface netWorkInterface = retrofit.create(NetWorkInterface.class);
    subscription = netWorkInterface.search("装逼")
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(observer);

}

总结

  • 上面的代码很简单,初步接触Retrofit的使用已经够用了,但是想发挥它更强大的功能可以在看看RectiveX相关的知识,这些知识资料也在博客中已经整理好了,可移步到这里查看:http://blog.csdn.net/dnnis/article/details/52160503
  • 这里只介绍了入门使用,更深层次的使用以后如果在项目中应用良好在补充吧。

你可能感兴趣的:(Android源码解读,Android进阶)