OkHttp封装

public class OkHttpUtils {
private MyHandler myHandler=new MyHandler();
private String mobile;
private String password;
    //单例模式
    private static OkHttpUtils okHttpUtils=null;
    private OkLoadListener okLoadListener;

    public static OkHttpUtils getInstance(){
        if (okHttpUtils==null){
            okHttpUtils=new OkHttpUtils();
        }
        return okHttpUtils;
    }
//Get请求
    public void okGet(String url,String mobile,String password){
        this.mobile = mobile;
        this.password = password;
        String newurl=url+"?mobile="+mobile+"&password="+password;
        //创建okhttpclient
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
        //用request请求,将URL和参数进行封装
        Request request = new Request.Builder().url(newurl).build();
        //call是请求队列ok里面请求队列默认是一个
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = myHandler.obtainMessage();
                message.what=0;
                message.obj=e.getMessage();
                myHandler.sendMessage(message);

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = myHandler.obtainMessage();
                message.what=1;
                message.obj = response.body().string();
                myHandler.sendMessage(message);
            }
        });
    }
    //post请求
    public void okPost(String url, Map<String,String> map){
        //创建okhttpclient
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
        FormBody.Builder builder = new FormBody.Builder();
        //遍历map集合,将参数放入body即可    遍历的核心思想就是。根据键取值
        if (map!=null){
            Set<String> keys = map.keySet();
            for (String key : keys){
                String value = map.get(key);
                builder.add(key,value);
            }
        }
        FormBody body = builder.build();
        //用request请求,将URL和参数进行封装
        Request request = new Request.Builder().url(url).post(body).build();
        //call是请求队列,ok里面请求队列默认是一个
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = myHandler.obtainMessage();
                message.what = 0;
                message.obj = e.getMessage();
                myHandler.sendMessage(message);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = myHandler.obtainMessage();
                message.what = 1;
                message.obj = response.body().string();
                myHandler.sendMessage(message);
            }
        });
    }
    //将输入发送到主线程,处理线程问题
    class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int w = msg.what;
            switch (w){
                case 0://失败
                    String error = (String) msg.obj;
                    //传出去
                    okLoadListener.okLoadError(error);
                break;
                case 1:
                   String json= (String) msg.obj;
                    okLoadListener.okLoadSuccess(json);
                   break;
            }
        }
    }
    public void setOkLoadListener(OkLoadListener okLoadListener){
        this.okLoadListener =okLoadListener;
    }
    //拦截器
    class MyIntercepter implements Interceptor{

        @Override
        public Response intercept(Chain chain) throws IOException {
            //获取请求
            Request request = chain.request();
            String method = request.method();
            //判断如果是formBody
            if (method.equals("GET")){
                HttpUrl url = request.url();
                String newUrl = url.toString() + "?mobile=" + mobile + "&password=" + password;
                Request request1 = request.newBuilder().url(newUrl).build();
                Response proceed = chain.proceed(request1);
                return proceed;
            }else if (method.equals("POST")){
                //创建新的body,将原来的参数,放入新的body里面,然后再讲公共参数,添加到新的body里面
                FormBody.Builder newBuilder = new FormBody.Builder();
                RequestBody body = request.body();
                if (body instanceof FormBody){
                    for (int i = 0; i <((FormBody) body).size() ; i++) {
                        String name = ((FormBody) body).name(i);
                        String value = ((FormBody) body).value(i);
                        //添加
                        newBuilder.add(name,value);
                    }
                    FormBody newBody = newBuilder.add("source", "android").build();
                  //创建新的请求
                    Request request1 = request.newBuilder().post(newBody).build();
                    //让request去重新请求,proceed所有http请求的核心
                    Response proceed = chain.proceed(request1);
                    return proceed;
                }
            }
            return null;
        }
    }
    //上传头像
    public void upLoadImage(String upload_url, File file) {
        //创建OKHttpClient
        OkHttpClient okHttpClient = new OkHttpClient();
        //创建MultiPartBody
        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        //设置参数
        MediaType mediaType = MediaType.parse("image/png");
        builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file));
        //添加其他参数
        builder.addFormDataPart("uid", "71");

        MultipartBody body = builder.build();
        //创建请求队列
        Request request = new Request.Builder().url(upload_url).post(body).build();
        Call newCall = okHttpClient.newCall(request);
        newCall.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
              //  Log.d(TAG, "onFailure() returned: " + "shibai---" + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
              //  Log.d(TAG, "onResponse() returned: " + response.body().string());
            }
        });
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值