public class RetrofitServiceManager { //超时时间 5s private static final int DEFAULT_READ_TIME_OUT = 10; private static final int DEFAULT_TIME_OUT = 5; private Retrofit mRetrofit; private String urlName = ""; private RetrofitServiceManager() { // 创建 OKHttpClient OkHttpClient.Builder builder = new OkHttpClient.Builder(); //连接超时时间 builder.connectTimeout(DEFAULT_TIME_OUT, TimeUnit.SECONDS); //写操作超时时间 builder.writeTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS); //读操作超时时间 builder.readTimeout(DEFAULT_READ_TIME_OUT, TimeUnit.SECONDS); //打印log HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { if (!message.contains("Content-Type") && !message.contains("Content-Length") && !message.contains("END") && !message.contains("<--") && !message.contains("Cache-Control") && !message.contains("Pragma") && !message.contains("Expires") && !message.contains("Vary") && !message.contains("Server") && !message.contains("Set-Cookie") && !message.contains("X-Powered-By") && !message.contains("Date") && !message.contains("Keep-Alive") && !message.contains("Connection") && !message.contains("Transfer-Encoding") && !message.isEmpty()) { LogUtil.e("请求" + urlName + ":", message); } else if (message.contains("{")) { LogUtil.e("返回:", message); } } }); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); builder.addInterceptor(loggingInterceptor); // 创建Retrofit mRetrofit = new Retrofit.Builder().client(builder.build()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl("") .build(); } private static class SingletonHolder { private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager(); } /** * 获取RetrofitServiceManager */ public static RetrofitServiceManager getInstance() { return SingletonHolder.INSTANCE; } /** * 获取对应的Service * * @param service Service 的 class */ public <T> T create(Class<T> service) { return mRetrofit.create(service); } /** * 标识 * @param urlName */ public void setUrlName(String urlName) { this.urlName = urlName; } }
示例:
public Observable<CheckUpdateBean> checkUpdata(String urlName) { RetrofitServiceManager.getInstance().setUrlName(urlName); return observe(checkUpdata()).map(new Func1<CheckUpdateBean, CheckUpdateBean>() { @Override public CheckUpdateBean call(CheckUpdateBean bean) { return bean; } }); }
@POST("Version/index/") Observable<CheckUpdateBean> checkUpdata();