okhttp封装

Okhttp 是一个 android 网络请求框架,如果不进行封装 调用会超麻烦,就会有大量的重复代码。

思路:分别封装 get,post,put,delete 请求,设置 interface 完成与失败 的 方法供外部自己实现

经过封装好OkhttpHelper的就可以下面这样调用, 只需要写成功与失败的逻辑了。

OkhttpHelper okhttpHelper = new OkhttpHelper();
Map<String, String> map = new HashMap<String, String>();
map.put("test", "fuck");
map.put("af", "你好");
okhttpHelper.get("dynamic", map, new OkhttpHelper.listener() {
    @Override
    public void onSuccess(String response) {
        Log.e("this", response);
    }

    @Override
    public void onError() {

    }
});

下面是OkhttpHelper 复制粘贴吧,
提醒:记得改下面类属性host 你自己的主机

/**
 * @date: 2019/4/21
 * @author:bin
 * @email:958615915@qq.com
 */
public class OkhttpHelper {

    private String host = "http://10.0.2.2:8080/lzy/";//主机地址
//    private String host = "http://127.0.0.1:8080/lzy/";//主机地址

    /**
     *  GET 请求
     * @param url 请求地址
     * @param params 请求参数
     * @param listener 成功与失败监听
     */
    public void get(final String url, final Map<String, String> params, final listener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();//OkHttpClient对象
                    StringBuffer paramStr = new StringBuffer("");
                    if (params != null) {//构建请求参数
                        paramStr.append("?");
                        for (String key:params.keySet()) {
                            paramStr.append(key + "=" + URLEncoder.encode(params.get(key), "utf-8") + "&");
                        }
                       paramStr.deleteCharAt(paramStr.length() - 1);//删掉最后一个&
                        Log.e("this", paramStr.toString());
                    }

                    Request request = new Request.Builder()
                            .url(host + url + paramStr)
                            .get()
                            .build();//创建Request 对象

                    Response response = null;
                    response = client.newCall(request).execute();//得到Response 对象
                    if (response.isSuccessful()) {
                        Log.d("kwwl","response.code()=="+response.code());
                        Log.d("kwwl","response.message()=="+response.message());
                        listener.onSuccess(response.body().string());
                    } else {
                        listener.onError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    /**
     * post 请求
     * @param url
     * @param params
     * @param listener
     */
    public void post(final String url, final Map<String, String> params, final listener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();//OkHttpClient对象
                    FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
                    StringBuffer paramStr = new StringBuffer("");
                    if (params != null) {//构建请求参数
                        for (String key:params.keySet()) {
                            formBody.add("key", params.get(key));
                        }
                    }

                    Request request = new Request.Builder()
                            .url(host + url + paramStr)
                            .post(formBody.build())
                            .build();//创建Request 对象

                    Response response = null;
                    response = client.newCall(request).execute();//得到Response 对象
                    if (response.isSuccessful()) {
                        listener.onSuccess(response.body().string());
                    } else {
                        listener.onError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    /**
     * put 请求
     * @param url
     * @param params
     * @param listener
     */
    public void put(final String url, final Map<String, String> params, final listener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();//OkHttpClient对象
                    FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
                    StringBuffer paramStr = new StringBuffer("");
                    if (params != null) {//构建请求参数
                        for (String key:params.keySet()) {
                            formBody.add("key", params.get(key));
                        }
                    }

                    Request request = new Request.Builder()
                            .url(host + url + paramStr)
                            .put(formBody.build())
                            .build();//创建Request 对象

                    Response response = null;
                    response = client.newCall(request).execute();//得到Response 对象
                    if (response.isSuccessful()) {
                        listener.onSuccess(response.body().string());
                    } else {
                        listener.onError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    /**
     * delete 请求
     * @param url
     * @param params
     * @param listener
     */
    public void delete(final String url, final Map<String, String> params, final listener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();//OkHttpClient对象
                    FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
                    StringBuffer paramStr = new StringBuffer("");
                    if (params != null) {//构建请求参数
                        for (String key:params.keySet()) {
                            formBody.add("key", params.get(key));
                        }
                    }

                    Request request = new Request.Builder()
                            .url(host + url + paramStr)
                            .delete(formBody.build())
                            .build();//创建Request 对象

                    Response response = null;
                    response = client.newCall(request).execute();//得到Response 对象
                    if (response.isSuccessful()) {
                        listener.onSuccess(response.body().string());
                    } else {
                        listener.onError();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    public interface listener {
        void onSuccess(String response);
        void onError();
    }

}
OkHttp是一个开源的HTTP客户端库,它封装了平台之间的差异性,为我们提供了方便的接口来发送HTTP请求和处理响应。当我们使用OkHttp时,可以使用封装类来简化使用过程。 OkHttp封装类主要包括以下几个方面: 1. 初始化OkHttpClient:首先,我们需要创建一个OkHttpClient对象,用于发送HTTP请求。在封装类中,可以在构造方法中进行OkHttpClient的初始化设置,比如设置超时时间、添加拦截器等。 2. 发送GET请求:通过封装类,我们可以定义一个方法来发送GET请求。该方法接收一个URL作为参数,使用OkHttpClient来创建一个Request对象,并通过该对象发送异步的GET请求。在回调中处理服务器响应结果,并返回给调用者。 3. 发送POST请求:类似于GET请求,我们可以封装一个方法来发送POST请求。该方法接收一个URL和需要发送的数据作为参数,使用OkHttpClient创建一个RequestBody对象,并通过该对象发送异步的POST请求。同样,在回调中处理响应结果,并返回给调用者。 4. 添加请求头:在某些情况下,我们可能需要添加请求头来发送自定义的信息。封装类可以提供一个方法,接收一个字符串类型的键值对参数,用于添加自定义的请求头。 5. 异步请求:OkHttp的请求是异步执行的,默认情况下在子线程中发送请求并在主线程中处理结果。封装类可以将异步请求的结果通过回调的方式返回给调用者,方便处理响应结果。 通过封装类,我们可以将OkHttp的使用变得更简单、更便捷。可以将一些通用的处理逻辑提取出来,在封装类中进行统一处理,并对外提供更友好的接口。这样可以减少代码的重复性,提高开发效率。同时,封装类还可以对请求进行统一的异常处理、日志打印等操作,方便排查问题和调试。总之,OkHttp封装类可以让我们更好地利用OkHttp的强大功能,提升开发效率和代码可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值