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()); } }); } }
OkHttp封装
最新推荐文章于 2023-07-28 15:05:26 发布