public class HttpUtils { private static String TAG = "HttpUtils"; private static OkHttpClient mHttpClient; private static ApiService apiService; private static HttpUtils httpUtils; private HttpUtils() { } /** * 初始化 HttpUtils */ public static void init() { initGson(); initHttpClient(); initRetrofit(); } /** * 初始化 Gson */ private static Gson initGson() { return new GsonBuilder().create(); } /** * 初始化 OkHttp */ private static void initHttpClient() { mHttpClient = new OkHttpClient.Builder() .addInterceptor(new LogInterceptor()) .build(); } /** * 初始化 ApiService */ private static void initRetrofit() { Retrofit mRetrofit = new Retrofit.Builder() .client(mHttpClient) .baseUrl(UrlService.BASE_URL) .addConverterFactory(GsonConverterFactory.create(initGson())) .build(); apiService = mRetrofit.create(ApiService.class); } private static class LogInterceptor implements Interceptor { @Override public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException { long timeStart = System.nanoTime(); okhttp3.Response response = chain.proceed(chain.request() .newBuilder() .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") .build()); long timeEnd = System.nanoTime(); if (response.request().body() != null) { Buffer buffer = new Buffer(); response.request().body().writeTo(buffer); L.e("Received Content : " + response.request().url() + "\n" + buffer.toString() + "\nin " + (timeEnd - timeStart) / 1e6d); } else { L.e("Received Content : " + response.request().url() + " in " + (timeEnd - timeStart) / 1e6d); } okhttp3.MediaType mediaType = response.body().contentType(); String content = response.body().string(); L.e("Response Body :\n" + content); //打印之后会清空响应体,这里重新装回,然后返回 return response.newBuilder() .body(okhttp3.ResponseBody.create(mediaType, content)) .build(); } } public static ApiService getApiService() { if (apiService == null) { throw new NullPointerException("HttpUtils has not be initialized"); } return apiService; } /** * 获取 token 参数 * * @param tokenSrc 签名前需要拼接的内容 * @return result 返回加密后的token */ public static String getToken(String... tokenSrc) { // 1.取出List集合中的值拼接成 值1:值2:值3: ...... String signString = ""; for (String s : tokenSrc) { if (null != s && !"".equals(s.trim()) && !"null".equals(s.trim())) { signString += s; signString += ":"; } } // 2.将服务器指定的秘钥组装上 signString = signString + Constant.PRIVATE_KEY; Log.e("GetHttpSign", "组装完的sign--->" + signString); // 3.对 组装后的 字符串排序 char[] chars = signString.toCharArray(); Arrays.sort(chars); signString = String.valueOf(chars); Log.e("GetHttpSign", "排序后的sign--->" + signString); // 4.将 排序好的 字符串进行MD5加密 String result = Md5.encryptMD5(signString); Log.e("GetHttpSign", "MD5加密后的sign--->" + result); return result; } /** * 获取 token 参数 * * @param list 组装token时所需的参数的集合 * @return result 返回加密后的token */ public static String getToken(List<String> list) { // Collections.sort(list); // 1.取出List集合中的值拼接成 值1:值2:值3: ...... String signParm = ""; for (int i = 0; i < list.size(); i++) { String s = list.get(i); signParm = signParm + s + ":"; } // 2.将服务器指定的秘钥组装上 signParm = signParm + Constant.PRIVATE_KEY; Log.e("GetHttpSign", "组装完的sign--->" + signParm); // 3.对 组装后的 字符串排序 char[] chars = signParm.toCharArray(); Arrays.sort(chars); signParm = String.valueOf(chars); Log.e("GetHttpSign", "排序后的sign--->" + signParm); // 4.将 排序好的 字符串进行MD5加密 String result = Md5.encryptMD5(signParm); Log.e("GetHttpSign", "MD5加密后的sign--->" + result); return result; } public static HttpUtils getInstance() { if (httpUtils == null) { synchronized (HttpUtils.class) { if (httpUtils == null) { httpUtils = new HttpUtils(); } } } return httpUtils; } public void uploadFile(String url, Map<String, Object> paramsMap, final CallBack callBack) { MultipartBody.Builder multipartBody = new MultipartBody.Builder(); //form 表单上传 multipartBody.setType(MultipartBody.FORM); //拼接参数 for (String key : paramsMap.keySet()) { Object object = paramsMap.get(key); if (object instanceof String) { multipartBody.addFormDataPart(key, object.toString()); } else if (object instanceof File) { File file = (File) object; multipartBody.addFormDataPart(key, file.getName(), MultipartBody.create(MediaType.parse("multipart/form-data"), file)); } } RequestBody requestBody = multipartBody.build(); //创建Request对象 Request request = new Request.Builder().url(url).post(requestBody).build(); new OkHttpClient.Builder() //设置最长读写时间 .readTimeout(100000, TimeUnit.SECONDS) .writeTimeout(100000, TimeUnit.SECONDS) .connectTimeout(100000, TimeUnit.SECONDS).build() .newCall(request) .enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { callBack.onFailed(e); } @Override public void onResponse(Call call, final Response response) throws IOException { final String str = response.body().string(); final UploadRobotChatLogBean msgBean = new Gson().fromJson(str, UploadRobotChatLogBean.class); callBack.onSuccess(msgBean); } }); } }
Application中实例化
HttpUtils.init();
Activity请求数据
String token = HttpUtils.getToken(Constant.WIFI_MAC); try { HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("deviceId", Constant.WIFI_MAC); hashMap.put("chatLogFile", file); hashMap.put("token", token); HttpUtils.getInstance().uploadFile(UrlService.BASE_URL + UrlService.URL_LOAD_FILE, hashMap, new CallBack() { @Override public void onSuccess(Object o) { UploadRobotChatLogBean uploadRobotChatLogBean = (UploadRobotChatLogBean) o; if (uploadRobotChatLogBean != null) { if (uploadRobotChatLogBean.getCode() == 10008) { L.e("成功"); } } } @Override public void onFailed(Exception e) { L.e("UploadRobotChatLogBean 请求服务器失败" + e.toString()); } }); } catch (Exception e) { e.printStackTrace(); }