2016.4.23

作者: oaosj | 来源:发表于2016-04-24 18:36 被阅读26次

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

    Call<NewsBean> call = service.getNews("type", "pageNum");
    response = call.execute();
    // 抛出IllegalStateException:
    response = call.execute();
    Call<NewsBean> 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<NewsBean> getJoke(@QueryMap Map<String, Object> 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

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