okhttp简单的二次封装

okHttp的二次封装

大家都知道okhttp,非常之火热,它的好处有很多

  1. 基于Http的文件上传

  2. 文件下载

  3. 加载图

  4. 支持请求回调,直接返回对象、对象集合

  5. 支持session的保持

  6. 当然一般的post与get都支持的,

今天在这里给大家分享一个okhttp的二次封装,附上源码:

public class OkHttpUtils {private static final String TAG = "OkHttpUtils";private static OkHttpUtils mInstance;private OkHttpClient mOkHttpClient;private Handler mHandler;private OkHttpUtils() {/*** 构建OkHttpClient*/mOkHttpClient = new OkHttpClient();/*** 设置连接的超时时间*/mOkHttpClient.setConnectTimeout(10, TimeUnit.SECONDS);/*** 设置响应的超时时间*/mOkHttpClient.setWriteTimeout(10, TimeUnit.SECONDS);/*** 请求的超时时间*/mOkHttpClient.setReadTimeout(30, TimeUnit.SECONDS);/*** 允许使用Cookie*/mOkHttpClient.setCookieHandler(new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER));/*** 获取主线程的handler*/mHandler = new Handler(Looper.getMainLooper());}/*** 通过单例模式构造对象* @return OkHttpUtils*/private synchronized static OkHttpUtils getmInstance() {if (mInstance == null) {mInstance = new OkHttpUtils();}return mInstance;}/*** 构造Get请求* @param url  请求的url* @param callback  结果回调的方法*/private void getRequest(String url, final ResultCallback callback) {final Request request = new Request.Builder().url(url).build();deliveryResult(callback, request);}/*** 构造post 请求* @param url 请求的url* @param callback 结果回调的方法* @param params 请求参数*/private void postRequest(String url, final ResultCallback callback, List params) {Request request = buildPostRequest(url, params);deliveryResult(callback, request);}/*** 处理请求结果的回调* @param callback* @param request*/private void deliveryResult(final ResultCallback callback, Request request) {mOkHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Request request, final IOException e) {sendFailCallback(callback, e);}@Overridepublic void onResponse(Response response) throws IOException {try {String str = response.body().string();sendSuccessCallBack(callback, str);} catch (final Exception e) {Log.e(TAG, "convert json failure", e);sendFailCallback(callback, e);}}});}/*** 发送失败的回调* @param callback* @param e*/private void sendFailCallback(final ResultCallback callback, final Exception e) {mHandler.post(new Runnable() {@Overridepublic void run() {if (callback != null) {callback.onFailure(e);}}});}/*** 发送成功的调* @param callback* @param obj*/private void sendSuccessCallBack(final ResultCallback callback, final Object obj) {mHandler.post(new Runnable() {@Overridepublic void run() {if (callback != null) {callback.onSuccess(obj);}}});}/*** 构造post请求* @param url  请求url* @param params 请求的参数* @return 返回 Request*/private Request buildPostRequest(String url, List params) {FormEncodingBuilder builder = new FormEncodingBuilder();for (Param param : params) {builder.add(param.key, param.value);}RequestBody requestBody = builder.build();return new Request.Builder().url(url).post(requestBody).build();}/**********************对外接口************************//*** get请求* @param url  请求url* @param callback  请求回调*/public static void get(String url, ResultCallback callback) {getmInstance().getRequest(url, callback);}/*** post请求* @param url       请求url* @param callback  请求回调* @param params    请求参数*/public static void post(String url, final ResultCallback callback, List params) {getmInstance().postRequest(url, callback, params);}/*** http请求回调类,回调方法在UI线程中执行* @param */public static abstract class ResultCallback<T> {public ResultCallback(){}/*** 请求成功回调* @param response*/public abstract void onSuccess(T response);/*** 请求失败回调* @param e*/public abstract void onFailure(Exception e);}/*** post请求参数类*/public static class Param {String key;//请求的参数String value;//参数的值public Param() {}public Param(String key, String value) {this.key = key;this.value = value;}}}

接下来就是如何引用:
这里写图片描述

这里就是POST的请求方式,封装好的okhttp,引入一句话就足以,
在这个给大家讲一下三个参数,首先url,你可以固定在封装的方法中直接写死也可以写活,看个人需求,第二个参数,是响应的结果,成功跟失败重写即可,第三个参数就是list,需要传入的数据,如:

   List list = new ArrayList();list.add(new OkHttpUtils.Param("action","reglogin"));list.add(new OkHttpUtils.Param("token",token));list.add(new OkHttpUtils.Param("uid",uid));list.add(new OkHttpUtils.Param("password",""));     

好,接下来再来看get请求:

这里写图片描述

get请求更加简单了,跟post大同小异,无非是没了参数而已。

好了,分享到此,是不是很好用呢。 这里写图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部