Android OKHTTP의 단일 예제 및 패키지된 인스턴스

6566 단어
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 Context context, final Handler handler) {
    FormBody.Builder builder = new FormBody.Builder();
    //    RequestParams   ,RequestParams   
    for (Map.Entry 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, handler, req);
  }

  /**
   *               ,        , get post
   */
  public static void request(RequestParams req, Context mContext,
      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  List getJsonArrayToModel(Message msg, Class t,
      T model) {
    // TODO Auto-generated method stub
    List list = new ArrayList();
    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 회전 모델의 이 클래스는 당시에 과도한 성능 문제를 고려하지 않았기 때문에 이 클래스에서 org를 사용했다.json.JSONObject도 gson을 사용했습니다. 여기에 해당하는 최적화를 할 수 있습니다.
궁금한 점이 있으면 댓글을 남기거나 본 사이트 지역사회에 가서 토론을 교류하고 읽어주셔서 감사합니다. 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기