OkHttp的封装使用

okhttp的口碑还是相当的好的。加上Google貌似在6.0版本里面删除了HttpClient相关API,为了更好的在应对网络访问,okhttp还是挺重要的.

//数据请求是否成功监听
public interface LoadNetDataListener {
    //数据加载成功
    void loadNetDataSuccess(String string);

    //数据加载失败
    void loadNetDataFailed(String string);
}
public class OkHttp3Utils {
    private MyHandler myHandler = new MyHandler();
    private static OkHttpClient okHttpClient = null;
    private LoadNetDataListener loadNetDataListener;

    private static OkHttpClient getOkHttpClient() {
        synchronized (OkHttp3Utils.class) {
            if (okHttpClient == null) {
                okHttpClient = new OkHttpClient();
            }
        }
        return okHttpClient;
    }

    //上传文件
    public static void loadFile(String url, File file, String fileName) {
        OkHttpClient okHttpClient = getOkHttpClient();
        //设置文件类型
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
        //设置请求体
        RequestBody body = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("image", fileName, requestBody)
                .build();
        //请求方式
        Request request = new Request.Builder().url(url).post(body).build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {
            }
        });
    }

    /**
     * 1.接口地址
     * 2.接口回调
     */
    public void doGet(String url) {
        OkHttpClient okHttpClient = getOkHttpClient();
        Request request = new Request.Builder().url(url).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }
            //这个onResponse执行的线程并不是UI线程。是的,如果你希望操作控件,还是需要使用handler等
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                Message message = myHandler.obtainMessage();
                message.what = 1;
                message.obj = string;
                myHandler.sendMessage(message);
            }
        });
    }

    /**
     * 1.地址
     * 2.接口回调
     * 3.请求体
     */
    public void doPost(String url, Map<String, String> map, Callback callback) {
        OkHttpClient okHttpClient = getOkHttpClient();
        FormBody.Builder builder = new FormBody.Builder();
        //遍历map集合   设置请求体
        for (String mapKey : map.keySet()) {
            builder.add(mapKey, map.get(mapKey));
        }
        //设置请求方式
        Request request = new Request.Builder().url(url).post(builder.build()).build();
        //执行请求方式    接口回调
        okHttpClient.newCall(request).enqueue(callback);
    }

    /**
     * 1.下载地址
     */
    public static void doDown(String url, Callback callback) {
        OkHttpClient okHttpClient = getOkHttpClient();
        Request build = new Request.Builder().url(url).build();
        okHttpClient.newCall(build).enqueue(callback);
    }

    //创建我的Handler
    class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    //请求失败
                    loadNetDataListener.loadNetDataSuccess("网络打小差了");
                    break;
                case 1:
                    //请求成功
                    String json = (String) msg.obj;
                    loadNetDataListener.loadNetDataSuccess(json);
                    break;

            }
        }
    }

    //给外部调用的方法
    public void setOnOKHttpGetListener(LoadNetDataListener loadNetDataListener) {
        this.loadNetDataListener = loadNetDataListener;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值