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 getMeiziData(@Path("page") int page);
}
sGankIO.getMeiziData(1)
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber() {
@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