Retrofit总结

Retrofit个人总结

记录一下开发中使用retrofit的时候的一些总结笔记。

@Url适合用于比如BaseUrl不一样的情况。@Url后面就是url全路径

@GET
Observable<AppPathBean> getThreeAppUrl(@Url String path);

@Path适合于路径中某个字段不一样。

  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);

也可以加请求参数 实际请求路径就是:group/{id}/users/?sort=sort

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

如果不确定参数的具体长度,那么可以使用@QueryMap

 @GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

@Header适合与请求需要添加额外的header,或者需要修改公共中的请求头信息

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)


@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();


@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

我们在实际开发中一般请求头中的参数是一定的,比如都需要在请求头中添加token,但是还是还有有些接口中并不想要token,比如登录接口中请求头参数可能就不一样。但是一般我们都会在封装OkHttp 的时候在请求头中默认添加token,这个时候我们需要在拦截器中判断是否添加token,比如Authorization 不为空,那么我们不需要在请求头中添加token.


import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;

/**
 * Created by huangjie on 2017/9/7.
 */

public class HttpClientManager {

    private static HttpClientManager mInstance;
    private HttpInterface mInterface;
     //拦截器
    private static Interceptor CACHE_CONTROL_INTERCEPTER = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();

            //如果请求头中 Authorization不为空或者Token为空
            if (original.header("Authorization") != null
                    || StringUtils.isEmpty(SharedPreferenceUtils.getToken())) {
                return chain.proceed(original);
            } else {
                Request.Builder requestBuilder = original.newBuilder()
                        .header("Authorization", "Bearer" + SharedPreferenceUtils.getToken())
                        .header("Content-Type", "application/json")
                        .method(original.method(), original.body());
                Request request = requestBuilder.build();
                LogUtils.error("请求ulr:" + request.url());
                return chain.proceed(request);
            }

        }
    };
     //缓存文件
    private static File cacheFile = new File(BaseApplication.getContext().getFilesDir(), "cache");
    static int cacheSize = 10 * 1024 * 1024;
    private static Cache mCache = new Cache(cacheFile, cacheSize);

    private static OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
            .addInterceptor(CACHE_CONTROL_INTERCEPTER)
            .cache(mCache)
            .connectTimeout(10, TimeUnit.SECONDS)
       .sslSocketFactory(SSLSocketFactoryUtil.createSSLSocketFactory(), new TrustAllManager())
            .build();


    public static HttpClientManager getInstance() {
        if (mInstance == null) {
            synchronized (HttpClientManager.class) {
                if (mInstance == null) {
                    mInstance = new HttpClientManager();
                }
            }
        }
        return mInstance;
    }


    public HttpInterface getClient() {
        if (mInterface == null) {
            mInterface = new Retrofit.Builder()
                    .baseUrl(Constants.BASE_URL)
                    .client(mOkHttpClient)
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build()
                    .create(HttpInterface.class);
        }
        return mInterface;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值