Android OKHTTP的单例和再封装的实例

Android OKHTTP的单例和再封装的实例,第1张

概述AndroidOKHTTP的单例和再封装实例/***Createdbyzmon16-2-1*okhttp的再封装,对于2.x版本,3.x版本将原有对okhttpclient配置

AndroID OKhttp的单例和再封装的实例

/** * Created by zm on 16-2-1 * okhttp的再封装,对于2.x版本,3.x版本将原有对okhttpclIEnt配置 * 改成了builder模式配 * 置,对于超时、代理、dns,okhttp已经做好了配置, * 若不需要特殊配置,可以跳过 */public class OkhttpUtil{  private static OkhttpClIEnt singleton;  //非常有必要,要不此类还是可以被new,但是无法避免反射,好恶心  private OkhttpUtil(){  }  public static OkhttpClIEnt getInstance() {    if (singleton == null)    {      synchronized (OkhttpUtil.class)      {        if (singleton == null)        {          singleton = new OkhttpClIEnt();        }      }    }    return singleton;  }}

之前在看okhttp源码的时候,发现square没有对okhttpclIEnt进行单例,网上也没找到合适的解释,以下是自己的猜测

优点:使用单例模式,避免了多次创建所产生的垃圾

缺点:对于一些特殊需求的代码进行一些灵活的配置,单例模式难以实现

总结:做为优秀的开源框架,square出发点是让用户更好更灵活的使用和扩展,从用户角度来说,对于不需要多次配置的项目,可以手动写一个单例模式,便于内存的高效利用

/** * okhttp再次封装 * Created by zm on 16-2-1 * update by zm on 16-3-19 增加Builder,方便以后内容或者字段的扩展 *  */public class httpTools{  private Context context;  private final RequestParams req;  private final Handler handler;  public httpTools(Builder builder)  {    // Todo auto-generated constructor stub    context = builder.context;    req = builder.req;    handler = builder.handler;  }  public static class Builder  {    private final RequestParams req;    private final Context context;    private final Handler handler;    public Builder(RequestParams req,Context mContext,Handler handler)    {      // Todo auto-generated constructor stub      this.req = req;      this.context = mContext;      this.handler = handler;    }    public httpTools build() {      return new httpTools(this);    }  }  public voID requestBuilder() {    // Todo auto-generated method stub    if(req==null||context==null||handler==null){      throw new NullPointerException("NullPointerException");    }    requestGet(req,context,handler);  }  private static voID parse(Call call,final Handler handler,final RequestParams req) {    // 请求加入调度    call.enqueue(new Callback()    {      @OverrIDe      public voID onResponse(Call call,Response response)          throws IOException {        // Todo auto-generated method stub        String result = response.body().string();        if (result != null)        {          Message message = Message.obtain();          message.obj = result;          message.what = req.getSuccessMsgWhat();          handler.sendMessage(message);        }      }      @OverrIDe      public voID onFailure(Call call,IOException e) {        // Todo auto-generated method stub        handler.sendEmptyMessage(req.getFailMsgWhat());      }    });  }  /**   *    * @param req   * @param context   * @param handler   *    *      get请求   */  public static voID requestGet(final RequestParams req,final Context context,final Handler handler) {    // 创建一个Request    final Request request = new Request.Builder().url(req.getRequestUrl()).build();    Call call = OkhttpUtil.getInstance().newCall(request);    parse(call,handler,req);  }  /**   * post请求   */  public static voID requestPost(final RequestParams req,final Handler handler) {    FormBody.Builder builder = new FormBody.Builder();    //此处是对RequestParams的遍历,RequestParams类省略    for (Map.Entry<String,Object> mEntry : req.getParamEntry())    {      String mEntryKey = mEntry.getKey();      Object mEntryValue = mEntry.getValue();      if (TextUtils.isEmpty(mEntryKey))      {        continue;      }      builder.add(mEntryKey,mEntryValue.toString());    }    Requestbody body = builder.build();    Request request = new Request.Builder().url(req.getUrl()).post(body).build();    Call call = OkhttpUtil.getInstance().newCall(request);    parse(call,req);  }  /**   *      数据请求的集中管理,方便以后一键替换,从get到post   */  public static voID request(RequestParams req,Handler handler) {    // Todo auto-generated method stub    requestGet(req,mContext,handler);  }}

最后再奉献上一个封装类

/** *  * Created by zm on 16-2-1 * 基于Gson的Json转model封装类 * */public class JsonToModel{private static String info = "info";  public static String getInfo()  {    return info;  }  public static voID setInfo(String info)  {    JsonToModel.info = info;  }  /**   *    * @param msg   * @param t   *      model类   * @param model   *      model对象   * @return   */  public static <T> List<T> getJsonArrayToModel(Message msg,Class<T> t,T model) {    // Todo auto-generated method stub    List<T> List = new ArrayList<T>();    try {      JsONObject Json = new JsONObject(msg.obj.toString());      for (int i = 0; i < Json.getJsONArray(getInfo()).length(); i++) {        model = GsonHelper.toType(Json.getJsONArray(getInfo()).get(i).toString(),t);        List.add(model);      }      return List;    } catch (Exception e) {      // Todo auto-generated catch block      Log.e("getJsonArrayToModel","error");      e.printstacktrace();    }    return null;  }}

Json转model的这个类中,当时没考虑到过多性能的问题,在此类中即使用了org.Json.JsONObject也使用了gson,此处还可以做出相应的优化

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android OKHTTP的单例和再封装的实例全部内容,希望文章能够帮你解决Android OKHTTP的单例和再封装的实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1145490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存