2016.4.23

1.关于Retrofit2踩过的坑:
1.1 Call对象实例
Call对象,需要注意的是Call对象实例只能被调用一次,不然就会抛出异常,如果要同时执行sync、async操作的话,可以通过call.clone()来解决。

Call call = service.getNews("type", "pageNum");
response = call.execute();
// 抛出IllegalStateException:
response = call.execute();
Call call2 = call.clone();
// 不会抛出异常:
response = call2.execute();

1.2 使用RxJava+Retrofit2返回Observable
因为Retrofit2使用了Call,使用Call的目的还是为了能在一个类型中同时使用同步和异步,如果在1.x版本就需要在接口里面设置回调了,比较死板。
这里要使用Observable的话,需要在构建Build的时候添加适配工厂。关于RxJava的适配官方已经写好了,添加:compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'引用,版本统一就好了。

@GET(Config.url_news)
Observable getJoke(@QueryMap Map options);
final Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(point)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
        .build();
T service = retrofit.create(clz);
return service;

到这里已经有一个很好的想法了,一般后台接口返回的数据类型不一,可以通过构造一个适配工厂:继承Adapter.Factory,实现类型的解析,用来直接返回我们需要的类型,不论是各式各样的Observable,还是其它。这样在配置接口的时候,更加灵活吧。这个想法遇到实际场景可以解决,再说了RxJavaCallAdapterFactory也是提供了很好的样板。
1.3 说说下午的坑

  • 没精力的情况下,不要任性的用开发阶段的产品,你需要自己去考虑任何可能产生的奇葩问题。
  • Retrofit2.0对于我们这种懒惰的人来说简直太棒了,但是一个毛病折腾了我2个小时,自己竟然在手写RxJava适配工厂,没想到有现成的,我艹。
  • carlos gardel 的 Por una Cabeza 听着很舒服,
    MV地址:www.youtube.com/watch?v=Gcxv7i02lXc

你可能感兴趣的:(2016.4.23)