个人学习的总结.
所谓的代理模式:申明一个共同的接口(代理接口),代理类与委托类实现这个共同的接口,重写相关的方法,代理类持有委托类对象的引用,代理类把要干的事交给委托类处理代理模式:
APP网络层实现隔离:
1.定义一个代理接口
*/ public interface IHttpRequest { /** * @param url * @param params * @param iCallback get请求 * */ public void get(String url, Map<String, String> params, ICallback iCallback); /** * @param url * @param params * @param iCallback post请求 */ public void post(String url, Map<String, String> params, ICallback iCallback); }
2.代理类实现代理接口
public class OkHttpRequestProcess implements IHttpRequest { private static volatile OkHttpRequestProcess instance; /** * 持有OkHttpRequest引用 */ private IHttpRequest mIHttpRequest; private OkHttpRequestProcess(IHttpRequest httpRequest) { this.mIHttpRequest = httpRequest; } public static void init(IHttpRequest httpRequest) { if (null == instance) { synchronized (OkHttpRequestProcess.class) { if (null == instance) { instance = new OkHttpRequestProcess(httpRequest); } } } } public static OkHttpRequestProcess getInstance() { return instance; } /** * @param url * @param params * @param iCallback * 将请求分派给委托类执行 */ @Override public void get(String url, Map<String, String> params, ICallback iCallback) { mIHttpRequest.get(url, params, iCallback); } /** * @param url * @param params * @param iCallback */ @Override public void post(String url, Map<String, String> params, ICallback iCallback) { mIHttpRequest.post(url, params, iCallback); }
3.干活的委托类
public class OkHttpRequest implements IHttpRequest { @Override public void get(String url, Map<String, String> params, final ICallback iCallback) { StringBuffer sb = new StringBuffer("?"); //拼接 get请求 url if (null != params) { for (Map.Entry<String, String> entry : params.entrySet()) { sb.append(entry.getKey()); sb.append("="); sb.append(entry.getValue()); sb.append("&"); } } sb.deleteCharAt(sb.length() - 1); url += sb.toString(); //创建网络处理的对象 OkHttpClient client = new OkHttpClient.Builder() //设置读取数据的时间 .readTimeout(5, TimeUnit.SECONDS) //对象的创建 .build(); //创建一个网络请求的对象,如果没有写请求方式,默认的是get //在请求对象里面传入链接的URL地址 Request request = new Request.Builder() .url(url).build(); //call就是我们可以执行的请求类 Call call = client.newCall(request); //异步方法,来执行任务的处理,一般都是使用异步方法执行的 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //失败 iCallback.onFailed(0, e); } @Override public void onResponse(Call call, Response response) throws IOException { //成功 iCallback.onSuccess(response.body().string()); } }); } @Override public void post(String url, Map<String, String> params, ICallback iCallback) { }
4.在application初始化
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); /** * OkHttp请求 */ // OkHttpRequestProcess.init(new OkHttpRequest()); /** * AsyncHttpClient请求 */ OkHttpRequestProcess.init(new AsyncHttpRequest()); } }
5.调用接口网络请求
Map<String, String> map = new HashMap<>(); map.put("g", "App"); map.put("c", "Home_app"); map.put("a", "App_is_personal"); map.put("uid", "840"); map.put("token", "a8310cd442757ae699df5d894f051"); OkHttpRequestProcess.getInstance().get("http://demo2.artmofang.com/app.php", map, new ModelCallback<MeInformationBean>() { @Override public void onFailed(int code, Throwable throwable) { } @Override public void onSuccess(String result) { super.onSuccess(result); Log.e(TAG, result.toString()); } });
参考:https://www.jianshu.com/p/2c36fa519cec