Android中好用的请求httputils工具类

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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值