OkHttp封装

1,实现效果

  • OkHttp  请求网络

 

2,实现逻辑

【1】单例创建对象

  • 私有成员变量

private HttpHelper(){

        //1.创建OkHttpClient对象

        //                              .cache(new Cache(file,size))//设置数据缓存的

        okhttp = new OkHttpClient.Builder()

                .readTimeout(15, TimeUnit.SECONDS)

                .writeTimeout(15, TimeUnit.SECONDS)

//                              .cache(new Cache(file,size))//设置数据缓存的

                .build();

    }
  • 成员变量自己创建对象

private static HttpHelper mInstance = new HttpHelper();

对外暴露获取对象的方法 

  • 
       public static HttpHelper create(){
    
             return mInstance;
    
        }

     

【2】执行get请求

  • 创建HttpCallback 接口

  public interface HttpCallback{

        void onSuccess(String data);

        void onFail(Exception e);

    }

创建Request对象,获取call对象

  •  
/***

     * 执行get请求

     * @param url

     * @param callback

     */

    public void execGet(String url, HashMap<String,String> headers, final HttpCallback callback){

        //2.创建请求对象Request

        Request.Builder builder = new Request.Builder()

                .url(url)

                .get();//设置请求方式是get

        //添加header

        if(headers!=null && !headers.isEmpty()){

            Iterator<Map.Entry<String, String>> iterator = headers.entrySet().iterator();

            while(iterator.hasNext()){

                Map.Entry<String, String> entry = iterator.next();

                builder.addHeader(entry.getKey(), entry.getValue());

            }

        }

        Request request = builder.build();

        //3.执行请求

        Call call = okhttp.newCall(request);

        //执行请求,但是这个方式是同步请求的方式

//        Response response = call.execute();

        //执行异步请求的方式

        call.enqueue(new Callback() {

            @Override

            public void onFailure(Call call, final IOException e) {

                e.printStackTrace();

                //因为在子线程不能更新UI 所以利用Handler调用方法

                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        if(callback!=null){

                            callback.onFail(e);

                        }

                    }

                });

            }

            @Override

            public void onResponse(Call call, Response response) throws IOException {

                //获取http相应体数据

                ResponseBody body = response.body();

                //将响应体的数据转为string

                final String string = body.string();

                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        //将数据传递给外界

                        if(callback!=null){

                            callback.onSuccess(string);

                        }

                    }

                });

            }

        });

    }

  • 写一个不要字段的get请求

  /**

     * 执行get请求

     * @param url

     * @param callback

     */

    public void execGet(String url, HttpCallback callback){

        execGet(url,null,callback);

    }  

 

3,全部代码 

public class HttpHelper {





    private static HttpHelper mInstance = new HttpHelper();

    private final OkHttpClient okhttp;

    //创建Handler

    private Handler handler = new Handler();

    private HttpHelper(){

        //1.创建OkHttpClient对象

        //                              .cache(new Cache(file,size))//设置数据缓存的

        okhttp = new OkHttpClient.Builder()

                .readTimeout(15, TimeUnit.SECONDS)

                .writeTimeout(15, TimeUnit.SECONDS)

//                              .cache(new Cache(file,size))//设置数据缓存的

                .build();

    }

    public static HttpHelper create(){





         return mInstance;

    }

    /**

     * 执行get请求

     * @param url

     * @param callback

     */

    public void execGet(String url, HttpCallback callback){

        execGet(url,null,callback);

    }

    /***

     * 执行get请求

     * @param url

     * @param callback

     */

    public void execGet(String url, HashMap<String,String> headers, final HttpCallback callback){

        //2.创建请求对象Request

        Request.Builder builder = new Request.Builder()

                .url(url)

                .get();//设置请求方式是get

        //添加header

        if(headers!=null && !headers.isEmpty()){

            Iterator<Map.Entry<String, String>> iterator = headers.entrySet().iterator();

            while(iterator.hasNext()){

                Map.Entry<String, String> entry = iterator.next();

                builder.addHeader(entry.getKey(), entry.getValue());

            }

        }

        Request request = builder.build();

        //3.执行请求

        Call call = okhttp.newCall(request);

        //执行请求,但是这个方式是同步请求的方式

//        Response response = call.execute();

        //执行异步请求的方式

        call.enqueue(new Callback() {

            @Override

            public void onFailure(Call call, final IOException e) {

                e.printStackTrace();

                //因为在子线程不能更新UI 所以利用Handler调用方法

                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        if(callback!=null){

                            callback.onFail(e);

                        }

                    }

                });

            }

            @Override

            public void onResponse(Call call, Response response) throws IOException {

                //获取http相应体数据

                ResponseBody body = response.body();

                //将响应体的数据转为string

                final String string = body.string();





                handler.post(new Runnable() {

                    @Override

                    public void run() {

                        //将数据传递给外界

                        if(callback!=null){

                            callback.onSuccess(string);

                        }

                    }

                });

            }

        });

    }

    public interface HttpCallback{

        void onSuccess(String data);

        void onFail(Exception e);

    }





}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴帅_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值