对于OK等平常网络请求实现隔离,Retrofit侵入性太强,不实现隔离,如果项目中用了Retrofit,就不执行隔离了.
网络回调通用的接口:
public interface HttpEneign { void get(String url, OKCallback okCallback); void post(); }
网络请求:实现如上接口:
public class OKHttpEneign implements HttpEneign{ private static volatile OKHttpEneign okHttpEneign; private OkHttpClient client; private Handler handler = new Handler(); public OKHttpEneign() { client = new OkHttpClient(); } public static OKHttpEneign getInstence(){ if(okHttpEneign==null){ synchronized (OKHttpEneign.class){ if(okHttpEneign==null){ okHttpEneign = new OKHttpEneign(); } } } return okHttpEneign; } @Override public void get(String url, final OKCallback okCallback) { Request request = new Request.Builder() .url(url) .get() .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { okCallback.onFalsed(e); } }); } @Override public void onResponse(Call call, Response response) throws IOException { final String string = response.body().string(); handler.post(new Runnable() { @Override public void run() { Class<Object> genericUtil = GenericUtil.getGenericUtil(okCallback.getClass()); Object o = GsonUtil.getGsonInstence().fromGson(string, genericUtil); okCallback.onSuccess(o); } }); } }); } @Override public void post() { } }
实现网络请求框架隔离的网络管理者: 同样实现如上的接口
public class HttpManager implements HttpEneign{ private static volatile HttpManager httpManager; private HttpEneign httpEneign; // public HttpManager(){ } public void initEneign(HttpEneign httpEneign){ //在AppLocation中进行改变网络框架的方法 this.httpEneign = httpEneign; } public static HttpManager getInstence(){ if(httpManager==null){ synchronized (HttpManager.class){ if(httpManager==null){ httpManager = new HttpManager(); } } } return httpManager; } public void get(String url, OKCallback okCallback){ httpEneign.get(url,okCallback); } public void post(){ } }
进行网络请求:
HttpManager.getInstence().get(path, new OKEntityCallback<OKTestBean>() { //接口在上篇文章中有写的接口 @Override public void onSuccess(OKTestBean okTestBean) { Log.e("Test",okTestBean.getMsg().toString()); } @Override public void onFalsed(Exception e) { Log.e("Test","NO"); } });
在AppLocation中初始化修改网络框架,调用HttpManager的initEneign方法初始化:
HttpManager.getInstence().initEneign(OKHttpEneign.getInstence());