添加依赖:
//日志拦截器 compile 'com.squareup.okhttp3:logging-interceptor:3.10.0' //rxjava compile 'io.reactivex.rxjava2:rxjava:2.0.7' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //retrofit compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
public class RetrofitHelper { public static OkHttpClient okHttpClient; public static ApiService 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) .cache(new Cache(fileDir, fileSize)) .addInterceptor(new HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT))//日志拦截器 .build(); } } } return okHttpClient; } public static ApiService getApiService(String url){ if(apiService == null){ synchronized (OkHttpClient.class) { apiService = createApiService(ApiService.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()) // .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.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)); } 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; } } }
ApiService
public interface ApiService { /** * Get基本请求,这里从Call改为Observable被观察者 * @param url * @return */ @GET public Observable<String> get(@Url String url); /** * Get请求提交表单 * @param url * @param map * @return */ @GET public Observable<String> get(@Url String url, @QueryMap Map<String, String> map); /** * Post请求提交表单 * @param url * @param map * @return */ @FormUrlEncoded @POST public Observable<String> post(@Url String url, @FieldMap Map<String, String> map); }