OkHttp的简单封装

博客介绍了单例工具类的思路和代码。思路上强调代码复用,节省系统资源,仅创建一个Client对象。单例工具类需构造私有化、自行实例化并提供公开方法,还给出了工具类代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OkHttp的简单封装

一.思路:

代码复用强,少写多余的代码+节省系统的资源(只有一个Client对象)
单例的gongju类:构造私有化+自行实例化+提供公开的方法

二.工具类代码

public class OkUtils {
    OkHttpClient okHttpClient;
    private OkUtils(){//由于构造方法直走一次,client只创建了一次
        Log.d("ytx", "创建一次");
        //创建Client对象
        okHttpClient= new OkHttpClient
                .Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }
    private static OkUtils okUtils=new OkUtils();//饿汉 没有现成安全问题

    public static OkUtils newInstance(){
        return okUtils;
    }
 //回调接口 :成功 失败
    interface MyCallBack{
        public void success(String str);
        public void error(String mesage);
    }
    //TODO 1:方法 get请求

    /***
     *
     * @param url  网址
     * @param myCallBack  结果回调给Activity  成功或者失败
     */
    public void doGet(String url, final MyCallBack myCallBack){
        //请求对象
        final Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        //发起连接
        Call call = okHttpClient.newCall(request);
        //得到结果
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                myCallBack.error(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                myCallBack.success(response.body().string());
            }
        });
    }
    //TODO 2:方法 post请求

    /***
     *
     * @param url  网址
     * @param myCallBack  结果回调给Activity  成功或者失败
     * @param keyname 请求体名称数组
     *  @param value 请求体值数组
     */
    public void doPost(String url, final MyCallBack myCallBack,String[] keyname,String[] value){
        //请求体对象
        FormBody.Builder builder = new FormBody.Builder();
        for(int i=0;i<keyname.length;i++){
            builder.add(keyname[i],value[i]);
        }
        FormBody formBody = builder.build();

        //请求对象
        final Request request = new Request.Builder()
                .post(formBody)//放置请求体
                .url(url)
                .build();
        //发起连接
        Call call = okHttpClient.newCall(request);
        //得到结果
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                myCallBack.error(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                myCallBack.success(response.body().string());
            }
        });
    }
    //TODO 3:下载各种文件

    /***
     *
     * @param url  请求网址
     * @param filepath  SD卡路径
     * @param myCallBack  回调接口
     */
    public void download(String url,String filepath,MyCallBack myCallBack){

    }


    //TODO 4:文件的上传
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值