Retrofit1切换到Retrofit2的注意事项

Retrofit2在我写文字的时候已经到beta3了(2016-01-10),我担心更新会有很多坑,根据github上的ChangeLog,不敢直接引入到真实项目中去,目前使用的是Retrofit2-beta2;通过查阅changelog以及自己在demo项目中的实践,记录下本文,如有朋友看到错误,敬请留言!(莫怪)

去这里看,更详细

首先是添加依赖要注意保持版本依赖一致

接着是添加Gradle依赖项

Retrofit 2默认情况下不集成Gson和Okhttp,在1X之前,我们完全不用考虑转换器的集成问题和请求采用什么,现在的变化需要你导入你需要的转换器开源库和OkHttp,

在引入的时候加入Retrofit的依赖(Okhttp 2.5以上)

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.square.okhttp:okhttp:2.5.0'

转换器

comile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'

如果项目有用到RXJava 2X也是不引入的,这里我测试过引入

compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
compile 'io.reativex:rxandroid:1.0.1'

还有几个调用的变化
1.0X以前

DrakeetRetrofit() {
        OkHttpClient client = new OkHttpClient();
        client.setReadTimeout(12, TimeUnit.SECONDS);

        RestAdapter.Builder builder =new  RestAdapter.Builder();
        builder.setClient(new OkClient(client))
               .setEndpoint("http://gank.avosapps.com/api")
               .setConverter(new GsonConverter(gson));

        RestAdapter gankRestAdapter = builder.build();
        builder.setEndpoint("https://leancloud.cn:443/1.1/classes");

        RestAdapter drakeetRestAdapter = builder.build();
        drakeetRestAdapter.setLogLevel(RestAdapter.LogLevel.FULL);

        gankService = gankRestAdapter.create(GankApi.class);
        drakeetService = drakeetRestAdapter.create(DrakeetApi.class);
    }

2.0X的变化

 Retrofit.Builder builder = new Retrofit.Builder();
 builder.baseUrl("http://gank.avosapps.com")
             .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create());

        Retrofit gankRestAdapter = builder.build();
        builder.baseUrl("https://leancloud.cn:443/1.1/classes");


        meiziService = gankRestAdapter.create(MeiziApi.class);

主要的变化是RestAdapter改为Retrofit,setEndPoint方法变成了baseUrl,同时注意在1.X以前是.setEndpoint(“http://gank.avosapps.com/api“),2.X以后就不能把api放到这里,不然是404!应该是builder.baseUrl(“http://gank.avosapps.com“)

注意没有没有默认的转换器

在之前的1的版本中默认有Gson做为json的转换器,在2的版本中没有默认的转换器,你需要自己定义转换器,如果你想使用Gson,就必须要在gradle添加Gson的依赖项:

compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'  

可用的转换器

GSON: com.squareup.retrofit:converter-gson:2.0.0-beta2
Moshi: com.squareup.retrofit:converter-moshi:2.0.0-beta2
Jackson: com.squareup.retrofit:converter-jackson:2.0.0-beta2
SimpleXML: com.squareup.retrofit:converter-simplexml:2.0.0-beta2
ProtoBuf: com.squareup.retrofit:converter-protobuf:2.0.0-beta2
Wire: com.squareup.retrofit:converter-wire:2.0.0-beta2

给Retrofit添加转换器

Retrofit retrofit = Retrofit.Builder()  
    .baseUrl("http://gank.avosapps.com");
   .addConverterFactory(ProtoConverterFactory.create())
    .addConverterFactory(GsonConverterFactory.create())
    .build();

Rxjava 集成

Retrofit 1中集成了三中请求执行机制:同步,异步和Rxjava;在Retrofit 2中默认的只有同步和异步的请求,但是Retrofit提供了一个添加其他请求执行机制进Retrofit中的方法,你可以添加更多的机制在你的app中,比如说Rxjava

Gradle 依赖

compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'  
compile 'io.reactivex:rxandroid:1.0.1'  

接下来需要在创建service实例之前添加一个CallAdapter进Retrofit对象

Retrofit retrofit = new Retrofit.Builder()  
    .baseUrl(baseUrl);
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .addConverterFactory(GsonConverterFactory.create())
    .build();

具体代码:

public interface UserService {  
   public static final int meizhiSize = 10;
    @GET("/api/data/福利/" + meizhiSize + "/{page}")
    Observable<MeizhiData> getMeiziData(@Path("page")  int page);
}

   sGankIO.getMeiziData(1)
                .subscribeOn(Schedulers.io())
                .subscribe(new Subscriber<MeizhiData>() {
                    @Override
                    public void onCompleted() {
                        Log.e("nima", "laile ");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("error", "laile " + e);
                    }

                    @Override
                    public void onNext(MeizhiData meizhiData) {
                        Log.e("error", "laile " + meizhiData.results.size());
                    }
                });

END

在我的简单demo中使用的东西比较少,其他的注意我后来发现在这个地方有说明,而且很好
地址

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值