retrofit工具类

1.提供helper类

public static OkHttpClient okHttpClient;
public static SerViceAPI apiService;


static {
    getOkHttpClient();
}


public static OkHttpClient getOkHttpClient(){
    if(okHttpClient == null){
        synchronized (OkHttpClient.class) {
            if(okHttpClient == null){
                File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");
                long fileSize = 10 * 1024 * 1024;
                okHttpClient = new OkHttpClient.Builder()
                        .connectTimeout(15, TimeUnit.SECONDS)
                        .readTimeout(15, TimeUnit.SECONDS)
                        .writeTimeout(15, TimeUnit.SECONDS)
                        .addInterceptor(new CommonParamsInterceptor())
                        .cache(new Cache(fileDir, fileSize))
                        .build();
            }
        }
    }
    return okHttpClient;
}


public static SerViceAPI getApiService(String url){
    if(apiService == null){
        synchronized (OkHttpClient.class) {
            apiService = createApiService(SerViceAPI.class,url);
        }
    }
    return apiService;
}


private static <T>T createApiService(Class<T> tClass, String url) {
    T t = new Retrofit.Builder()
            .baseUrl(url)
            .client(okHttpClient)
            .addConverterFactory(ScalarsConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build()
            .create(tClass);
    return t;
}


private static class CommonParamsInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String method = request.method();
        String oldUrl = request.url().toString();
        Log.e("---拦截器",request.url()+"---"+request.method()+"--"+request.header("User-agent"));
        Map<String,String> map = new HashMap<>();
        map.put("source","android");

        if ("GET".equals(method)){
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(oldUrl);
            if (oldUrl.contains("?")){
                if (oldUrl.indexOf("?") == oldUrl.length()-1){
                }else {
                    stringBuilder.append("&");
                }
            }else {
                stringBuilder.append("?");
            }
            for (Map.Entry<String,String> entry: map.entrySet()) {
                stringBuilder.append(entry.getKey())
                        .append("=")
                        .append(entry.getValue())
                        .append("&");
            }
            if (stringBuilder.indexOf("&") != -1){
                stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
            }
            String newUrl = stringBuilder.toString();
            request = request.newBuilder()
                    .url(newUrl)
                    .build();
        }else if ("POST".equals(method)){
            RequestBody oldRequestBody = request.body();
            if (oldRequestBody instanceof FormBody){
                FormBody oldBody = (FormBody) oldRequestBody;
                FormBody.Builder builder = new FormBody.Builder();
                for (int i=0;i<oldBody.size();i++){
                    builder.add(oldBody.name(i),oldBody.value(i));
                    Log.d("CommonParamsInterceptor", oldBody.name(i)+"===="+oldBody.value(i));

                }
                for (Map.Entry<String,String> entry:map.entrySet()) {
                    builder.add(entry.getKey(),entry.getValue());
                }
                FormBody newBody = builder.build();
                request = request.newBuilder()
                        .url(oldUrl)
                        .post(newBody)
                        .build();
            }
        }
        Response response = chain.proceed(request);
        return response;
    }
}

2.提供路径

public class API {
    public static final String HOST="http://gank.io/api/";
    public static final String URL="data/Android/10/1";

    public static final String HOSTURL="http://120.27.23.105/";
    public static final String loginurl="user/login";
}

3.提供接口

public interface SerViceAPI {
    @GET(API.URL)
    Call<Bean> getBean();
    @POST(API.HOSTURL+API.loginurl)
   Call<LoginBean> getLogin(@Field("mobile")String mob,@Field("password") String pass);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值