用两个接口实现多级链表的契约类以及MVP和OKHTTP

首先穿件一个契约类(接口)。p层使用抽象类,m层和v层都使用内部接口来实现。

p层
abstract class OnePresenter{
        public abstract void getLeftList(HashMap<String,String> params);
        public abstract void getRightList(HashMap<String,String> params);
    }
    M层
    public interface OneModel{
        void getLeftList(HashMap<String,String> params, model.OneModel.OneModelCallBack oneModelCallBack);
        void getRightList(HashMap<String,String> params, model.OneModel.OneModelCallBack oneModelCallBack);
    }
    v层
    public interface OneView{
        void leftSuccess(List<LeftBean.Data> leftbeanList);
        void rightSuccess(List<RightBean.OneData> rightbeanList);
        void leftFailure(String error);
        void rightFailure(String error);
    }

契约类创建完之后,再使用MVP框架。(开始创建model和presenter)。

model类-----实现契约类的model接口(model接口只有两个方法:getLeft和getRight)
@Override
    public void getLeftList(HashMap<String, String> params, final OneModelCallBack oneModelCallBack) {
        OKHttpUtils.getmInstance().doPost(ApiUrl.LEFT_URL, params, new OkHttpCallBack() {
            @Override
            public void failure(String msg) {
                if(oneModelCallBack != null){
                    oneModelCallBack.leftFailure(msg);
                }
            }

            @Override
            public void success(String result) {
                if(oneModelCallBack != null){
                    oneModelCallBack.leftSuccess(result);
                }
            }
        });
    }
@Override
    public void getRightList(HashMap<String, String> params, final OneModelCallBack oneModelCallBack) {
        OKHttpUtils.getmInstance().doPost(ApiUrl.RIGHT_URL, params, new OkHttpCallBack() {
            @Override
            public void failure(String msg) {
                if(oneModelCallBack != null){
                    oneModelCallBack.rightFailure(msg);
                }
            }

            @Override
            public void success(String result) {
                    if(oneModelCallBack != null){
                        oneModelCallBack.rightSuccess(result);
                    }
            }
        });
    }
    最后创建一个model的内部接口
    public  interface OneModelCallBack{
      void leftSuccess (String result);
      void rightSuccess(String result);
      void leftFailure(String error);
      void rightFailure(String error);
    }
    presenter层---------继承契约类的p层(契约类的p层有两个方法:getLeftList和getRightList)
   第一步:因为p层是MVP的桥梁,所以要有view和model层相连接,需要导入model和契约类里的view,然后实现构造方法。
   private OneModel oneModel;
    private OneContract.OneView view;

    public OnePresenter(OneContract.OneView view) {
        this.oneModel = new OneModel();
        this.view = view;
    }
     @Override
    public void getLeftList(HashMap<String, String> params) {
        oneModel.getLeftList(params, new OneModel.OneModelCallBack() { 
        -------------------------------这个地方调用了model里面的方法和实现了model的内部接口---------------------------------------------
            @Override
            public void leftSuccess(String result) {
               LeftBean leftBean = new Gson().fromJson(result,LeftBean.class);
              List<LeftBean.Data> data = leftBean.data;
              view.leftSuccess(data);
                -------------------------------然后gson解析,解析完了之后data传参给契约类中的view---------------------------------------------
            }

            @Override
            public void rightSuccess(String result) {

            }

            @Override
            public void leftFailure(String error) {

            }

            @Override
            public void rightFailure(String error) {

            }
        });
    }
     @Override
    public void getRightList(HashMap<String, String> params) {
        oneModel.getRightList(params, new OneModel.OneModelCallBack() {
            @Override
            public void leftSuccess(String result) {

            }

            @Override
            public void rightSuccess(String result) {
                RightBean rightBean = new Gson().fromJson(result,RightBean.class);
                List<RightBean.OneData> data = rightBean.data;
                view.rightSuccess(data);
            }

            @Override
            public void leftFailure(String error) {

            }

            @Override
            public void rightFailure(String error) {

            }
        });
    }

若要使用OKhttp,就必须封装一个OKhttputils的类,和OKhttpcallback的接口用来回调请求成功和请求失败的方法。
OKhttputils

----------------------------------------handler机制,OKhttp,封装类的线程mInstance---------------------------------------------------
private Handler handler = new Handler();
    private OkHttpClient okHttpClient;
    private static OKHttpUtils mInstance;
   ----------------------------------------OKHttpUtils()      私有构造------------------------------------------------------------------------- 
     /**
     * 私有构造
     */
    private OKHttpUtils(){
        //拦截器
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .writeTimeout(5,TimeUnit.SECONDS)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
      ---------------------------------------- 创建实例,检验,单例模式进行实例化mInstance()------------------------------------------------------------ 
    public static OKHttpUtils getmInstance() {
        if(mInstance == null){
            synchronized (OKHttpUtils.class){
                if(mInstance == null){
                    mInstance = new OKHttpUtils();
                }
            }
        }
        return mInstance;
    }
     ---------------------------------------- post请求------------------------------------------------------------------------------------------------------------------ 
     public void doPost(String url,HashMap<String,String> params,final  OkHttpCallBack httpCallBack){

        FormBody.Builder formBody = new FormBody.Builder();

        for(Map.Entry<String,String> map : params.entrySet()){
            formBody.add(map.getKey(),map.getValue());
        }
        RequestBody requestBody = formBody.build();
        //执行post请求
        final Request request = new Request.Builder().url(url).post(requestBody).build();
         okHttpClient.newCall(request).enqueue(new Callback() {
             @Override
             public void onFailure(Call call, IOException e) {
                 if(httpCallBack != null){
                     handler.post(new Runnable() {
                         @Override
                         public void run() {
                            httpCallBack.failure("网络异常");
                         }
                     });
                 }
             }

             @Override
             public void onResponse(Call call, Response response) throws IOException {
                if(httpCallBack != null){
                    if(response.code() == 200){
                      final String result = response.body().string();
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                httpCallBack.success(result);
                            }
                        });
                    }
                }
             }
         });
    }
    ----------------------------------------------------------get请求-------------------------------------------------------------------------------------------
     /**
     * get请求方式
     */
    public void doGet(String url, HashMap<String,String> params,final OkHttpCallBack requestCallBack){
        StringBuilder builder = new StringBuilder();
       String nurl = url;
        if(params != null && params.size()>0){
            for(Map.Entry<String,String> map : params.entrySet()){
                builder.append(map.getKey()).append("=").append(map.getValue()).append("&");
            }
            nurl = url+"?"+builder.toString();
        }
        //执行get请求
        Request request = new Request.Builder().url(nurl).get().build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if(requestCallBack != null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            requestCallBack.failure("网络异常");
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
              final String result = response.body().string();
              if(requestCallBack != null){
                  handler.post(new Runnable() {
                      @Override
                      public void run() {
                        requestCallBack.success(result);
                      }
                  });
              }
            }
        });
    }
      ---------------------------------------- 全部关闭----------------------------------------------------------------------------------------------------------------- 
      public void cancelAllTask(){
        if(okHttpClient != null){
            okHttpClient.dispatcher().cancelAll();
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_43808025/article/details/85946754
今日推荐