第三方网络框架

UML类图.png

一、定义IHttpEngine规则类

      public interface IHttpEngine {

   // get 提交
   void get(Context context, String url, Map<String, Object> params, EngineCallBack httpCallBack);

 // post 提交
 void post(Context context, String url, Map<String, Object> params, EngineCallBack httpCallBack);

   // 取消请求

  // 下载文件

  // 上传文件

 // https添加安全证书
   }

二、定义统一回调EngineCallBack

      public interface EngineCallBack {

      //开始执行回调,请求网络前的方法
         void onPreExecute(Context context, Map<String, Object> params);

        //失败
            void onError(Exception e);
             //成功
             void onSuccess(String result);


             public final EngineCallBack DEFAULT_CALL_BACK=new EngineCallBack() {
                 @Override
                 public void onPreExecute(Context context, Map<String, Object> params) {
     
                          }

               @Override
              public void onError(Exception e) {

                 }

              @Override
               public void onSuccess(String result) {
  
               }
             };
                }

三、实现规则

   public class OkHttpEngine implements IHttpEngine {

         private static OkHttpClient mOkHttpClient = new OkHttpClient();
            private static Handler mHandler = new Handler();

       @Override
              public void get(Context context,String url, Map<String, Object> params, final EngineCallBack httpCallBack) {
                  //写请求逻辑 
       }
   @Override
   public void post(Context context,String url, Map<String, Object> params, final EngineCallBack httpCallBack) {

       //        final String jointUrl = HttpUtils.jointParams(url, params);  //打印参数
          //        Log.e("Post请求路径:", jointUrl);
        //
         //        // 了解 Okhhtp
          //        RequestBody requestBody = appendBody(params);
           //        Request request = new Request.Builder()
        //                .url(url)
       //                .tag(context)
      //                .post(requestBody)
        //                .build();
      //
         //        mOkHttpClient.newCall(request).enqueue(
          //                new Callback() {
     //                    @Override
       //                    public void onFailure(Call call, IOException e) {
      //                        httpCallBack.onError(e);
        //                    }
        //
         //                    @Override
      //                    public void onResponse(Call call, okhttp3.Response response) throws IOException {
        //                        // 这个 两个回掉方法都不是在主线程中
     //                        String result = response.body().toString();
        //                        Log.e("Post返回结果:", jointUrl);
       //                        httpCallBack.onSuccess(result);
          //                    }
         //
   //                }
          //        );
 
          }
         }

四、实现回调

            public abstract class OkhttpCallBack<T> implements EngineCallBack {
                 @Override
                public void onPreExecute(Context context, Map<String, Object> params) {
            //添加公用参数
              params.put("", "");

           onPreExecute();
                  }

        //开始执行
        public void onPreExecute() {

          }

        @Override
         public void onSuccess(String result) {

               LogUtil.e("TAG",result);

               Gson gson = new Gson();
             //转换泛型
          T ObjResult = (T) gson.fromJson(result, HttpUtils.analysisClassInfo(this));
           onSuccess(ObjResult);
        }
         public abstract void onSuccess(T result);
        }

五、链式调用

      public class HttpUtils {
    //直接带参数,链式调用
   private String mUrl;

// 请求参数
private Map<String, Object> mParams;

//请求方式
private int mType=GET_REQUEST;
// get请求标识
private static final int GET_REQUEST = 0x0011;
// post请求标识
private static final int POST_REQUEST = 0x0022;


// 上下文
private Context mContext;
private HttpUtils(Context context) {
    this.mContext = context;
    mParams = new HashMap<>();
}
public static HttpUtils with(Context context){
    return new HttpUtils(context);

}

//请求方式
public HttpUtils post(){
    mType=POST_REQUEST;
    return this;
}
public HttpUtils get(){
    mType=GET_REQUEST;
    return this;
}

//添加参数
public HttpUtils addParams(String key,Object value){
    mParams.put(key,value);
    return this;
}
public HttpUtils addParams(Map<String,Object> parmas){
    mParams.putAll(parmas);
    return this;
}

//添加路径
public HttpUtils url(String url){
    mUrl=url;
    return this;
}
//执行回调
public void execute(EngineCallBack callBack){

    callBack.onPreExecute(mContext,mParams);


    if (callBack==null){
        callBack=EngineCallBack.DEFAULT_CALL_BACK;
    }

    //判断执行
    if (mType==POST_REQUEST){
        post(mUrl,mParams,callBack);
    }

    if (mType==GET_REQUEST){
        get(mUrl, mParams, callBack);
    }


}
public void execute(){
    execute(null);
}

//默认OkHttpEngine
private static IHttpEngine mIHttpEngine=new OkHttpEngine();

//在Application初始化引擎
public static void  init(IHttpEngine iHttpEngine){
    mIHttpEngine=iHttpEngine;

}

//可以自带引擎
public  HttpUtils exchangEngine(IHttpEngine iHttpEngine){
    mIHttpEngine=iHttpEngine;
    return this;
}

private void get(String url, Map<String, Object> params, EngineCallBack httpCallBack) {
    mIHttpEngine.get(mContext,url,params,httpCallBack);
}


private void post(String url, Map<String, Object> params, EngineCallBack httpCallBack) {
    mIHttpEngine.post(mContext, url, params, httpCallBack);
}

public static Class<?> analysisClassInfo(Object object){
    Type genType = object.getClass().getGenericSuperclass();
    Type[] typeArguments = ((ParameterizedType) genType).getActualTypeArguments();
    return  (Class<?>)typeArguments[0];
}
}

六、使用

  HttpUtils.with(context)
 .exchangeEngine(new RetrofitEngine());// 切换成Retrofit引擎
 .url(UrlConstant.CITY_MAIN_PAGE) // 路径
 .addParam("city", mCurrentCity)  // 添加参数
 .cache(true)  // 需要读缓存
 .post()  // post提交
 .execute(new HttpCallBack<CityFragmentEntity>() {
         @Override
        public void onError(Exception e) {
                // 错误回调
        }

        @Override
        public void onSucceed(CityFragmentEntity result) {
               // result  返回的解析好的对象  可以直接操作不需要再Json解析
               // 成功的回调
        }
 });

更换框架实现IHttpEngine 接口回调

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容