okhttp 2.x 用法/封装

来源:互联网 发布:王子长 知乎 编辑:程序博客网 时间:2024/06/04 00:23

okhttp 2.x 用法/封装

android的网络框架okhttp被普遍使用,包括现在比较强大的retrofit也是封装okhttp 简单了解okhttp(get/post):
//get请求:

  private void getRequest() {    //创建okHttpClient对象    OkHttpClient mOkHttpClient = new OkHttpClient();    final Request request = new Request.Builder()            .url("http://www.baidu.com")            .build();    Call call = mOkHttpClient.newCall(request);    call.enqueue(new Callback() {        @Override        public void onFailure(Request request, IOException e) {        }        @Override        public void onResponse(final Response response)         throws IOException {        //异步请求 更新UI需要切到主线程                }            });        }    });}

//post请求

private void postAsynHttp() {    OkHttpClient mOkHttpClient = new OkHttpClient();    //设置post请求数据    RequestBody formBody = new FormEncodingBuilder()            .add("size", "10")            .build();    Request request = new Request.Builder()            .url("http://blog.csdn.net/soullines/article/details/78040109")            .post(formBody)            .build();    Call call = mOkHttpClient.newCall(request);    call.enqueue(new Callback() {        @Override        public void onFailure(Request request, IOException e) {        }        @Override        public void onResponse(Response response)         throws IOException {            });        }    });}

当然okhttp的使用需要封装 —->当然okhttp可以设置请求超时和设置缓冲

public class OkHttpEngine {    private static OkHttpEngine mInstance;    private OkHttpClient mOkHttpClient;    private Handler mHandler;    //单例模式    public static OkHttpEngine getInstance() {        if (mInstance == null) {            synchronized (OkHttpEngine.class) {                if (mInstance == null) {                    mInstance = new OkHttpEngine();                }            }        }        return mInstance;    }    //设置超时    private setTimeout() {        mOkHttpClient = new OkHttpClient();        mOkHttpClient.setConnectTimeout(15, TimeUnit.SECONDS);        mOkHttpClient.setWriteTimeout(20, TimeUnit.SECONDS);        mOkHttpClient.setReadTimeout(20, TimeUnit.SECONDS);        mHandler = new Handler();    }    //设置缓冲    public void setCache(Context mContext) {        File sdcache = mContext.getExternalCacheDir();        int cacheSize = 10 * 1024 * 1024;        mOkHttpClient.setCache(new Cache(sdcache.getAbsoluteFile(), cacheSize));    }    /**     * 异步get请求     * @param url     * @param callback     */    public void getAsynHttp(String url, ResultCallback callback) {        final Request request = new Request.Builder()                .url(url)                .build();        Call call = mOkHttpClient.newCall(request);        dealResult(call, callback);    }    private void dealResult(Call call, final ResultCallback callback) {        call.enqueue(new Callback() {            @Override            public void onFailure(Request request, IOException e) {                sendFailedCallback(request, e, callback);            }            @Override            public void onResponse(final Response response) throws IOException {                sendSuccessCallback(response, callback);            }            private void sendSuccessCallback(final Response objec            t, final ResultCallback callback) {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        if (callback != null) {                            callback.onResponse(object);                        }                    }                });            }            private void sendFailedCallback(final Request             request, final Exception e, final ResultCallback             callback) {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        if (callback != null)                            callback.onError(request, e);                    }                });            }        });    }}

//okhttp封装之后的使用

    OkHttpEngine.getInstance()        .setTimeout()//可以修改封装代码 动态设置请求超时时间        .setCache(this)        .getAsynHttp("http://www.baidu.com", new ResultCallback() {          @Override          public void onError(Request request, Exception e) {          }          @Override          public void onResponse(Response response) {          }      });

简单的okhttp封装,android中可定制使用

原创粉丝点击