Android动态切换retrofit的baseurl

275 阅读1分钟

反射切换:亲测有效

Class<Retrofit> retrofitClass = Retrofit.class;try {    Field baseUrlField = retrofitClass.getDeclaredField("baseUrl");    baseUrlField.setAccessible(true);    baseUrlField.set(retrofit, HttpUrl.parse(newBaseUrl));    Field serviceMethodCacheField = retrofitClass.getDeclaredField("serviceMethodCache");    serviceMethodCacheField.setAccessible(true);    Map<Method, Object> serviceMethodCache = (Map<Method, Object>) serviceMethodCacheField.get(retrofit);    if (null != serviceMethodCache && serviceMethodCache.size() > 0) {        for (Map.Entry<Method, Object> methodObjectEntry : serviceMethodCache.entrySet()) {            Class valueClass = methodObjectEntry.getValue().getClass();            baseUrlField = valueClass.getDeclaredField("baseUrl");            baseUrlField.setAccessible(true);            baseUrlField.set(methodObjectEntry.getValue(), HttpUrl.parse(newBaseUrl));        }    }} catch (Exception e) {    e.printStackTrace();}