目的:复习,总结使用技巧.
Retrofit:
注意:
绝对不要在服务器接口地址上带""/" ,如"/list"这种是禁止的,只可以"list"
/**
*
* retrofit2 @Path 多用于 路径式,如第一个接口为: data/福利/3/2 (number = 3 , page = 2)
* retrofit2 @Query key-value式,如 key = aaa value = "aaa" 那么 GET下,请求为/login/loginSuccess/?aaa="aaa"
* retrofit2 @Query 动态参数 如果某些参数不是必须的,那么将这些参数类型设置为引用类型,并传入null,在构建时不会发送这些参数
*/
public interface Api {
@GET("data/福利/{number}/{page}")
Observable<GankBeautyResult> getBeauties(@Path("number") int number, @Path("page") int page);
@GET("login/loginSuccess")
Observable<LoginVo> login(@Query("account") String account
, @Query("pwd") String pwd, @Query("vcode") String vcode
, @Query("imageId") String imageId, @Query("deviceToken") String deviceToken);
@GET("appCms/startPage")
Observable<StartPage> getStartPage();
}
在实际项目中,通常每个请求都要携带一些公用参数,或者请求头,这里提供一种思路,使用OKHttpClient的Interceptor来实现该需求;
if (api == null) {
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new CommonParamsInterceptor())
.build();
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl("http://www/")
.addConverterFactory(gsonConverterFactory)
.addCallAdapterFactory(rxJavaCallAdapterFactory)
.build();
api = retrofit.create(Api.class);
}
return zhuangbiApi;
关于addConvertFactory的要点:
// 注意: 如果添加多了ConvertFactory,那么Retrofit会按照add的顺序依次解析,若成功,不再执行下一个,若失败,则执行下一个
Retrofit retrofit = new Retrofit.Builder().client(okHttpClient)
.baseUrl("http://com/")
.addConverterFactory(myCustomConverterFactory)
.addConverterFactory(gsonConverterFactory)
这样的话,一般gsonConverttFactory不会执行.