RxJava + OKhttp + Retrofit心得总结第一篇


目的:复习,总结使用技巧.



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 getBeauties(@Path("number") int number, @Path("page") int page);

    @GET("login/loginSuccess")
    Observable 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 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不会执行.




你可能感兴趣的:(android)