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);
}