网络请求之优化参数添加工具类自定义Map类

导入依赖:

implementation 'com.squareup.okhttp3:okhttp:3.4.1'

 

 调用方法:

 

File file = new File("");HttpParams params = new HttpParams();
params.put("mobile", "22");
params.put("password", 33);
params.put("api_name", "login");
params.put("id",false);
params.put("file",file);

工具类:

 

/*** @author : LGQ* @date : 2020/04/16 09* @desc :*/public class HttpParams implements Serializable {private static final long serialVersionUID = 7369819159227055048L;public static final MediaType MEDIA_TYPE_PLAIN = MediaType.parse("text/plain;charset=utf-8");public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");public static final MediaType MEDIA_TYPE_STREAM = MediaType.parse("application/octet-stream");public static final boolean IS_REPLACE = true;/** 普通的键值对参数 */public LinkedHashMap<String, List<String>> urlParamsMap;/** 文件的键值对参数 */public LinkedHashMap<String, List<FileWrapper>> fileParamsMap;public HttpParams() {init();}public HttpParams(String key, String value) {init();put(key, value, IS_REPLACE);}public HttpParams(String key, File file) {init();put(key, file);}private void init() {urlParamsMap = new LinkedHashMap<>();fileParamsMap = new LinkedHashMap<>();}public void put(HttpParams params) {if (params != null) {if (params.urlParamsMap != null && !params.urlParamsMap.isEmpty()) urlParamsMap.putAll(params.urlParamsMap);if (params.fileParamsMap != null && !params.fileParamsMap.isEmpty()) fileParamsMap.putAll(params.fileParamsMap);}}public void put(Map<String, String> params, boolean... isReplace) {if (params == null || params.isEmpty()) return;for (Map.Entry<String, String> entry : params.entrySet()) {put(entry.getKey(), entry.getValue(), isReplace);}}public void put(String key, String value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, value, isReplace[0]);} else {put(key, value, IS_REPLACE);}}public void put(String key, int value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}public void put(String key, long value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}public void put(String key, float value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}public void put(String key, double value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}public void put(String key, char value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}public void put(String key, boolean value, boolean... isReplace) {if (isReplace != null && isReplace.length > 0) {put(key, String.valueOf(value), isReplace[0]);} else {put(key, String.valueOf(value), IS_REPLACE);}}private void put(String key, String value, boolean isReplace) {if (key != null && value != null) {List<String> urlValues = urlParamsMap.get(key);if (urlValues == null) {urlValues = new ArrayList<>();urlParamsMap.put(key, urlValues);}if (isReplace) urlValues.clear();urlValues.add(value);}}public void putUrlParams(String key, List<String> values) {if (key != null && values != null && !values.isEmpty()) {for (String value : values) {put(key, value, false);}}}public void put(String key, File file) {put(key, file, file.getName());}public void put(String key, File file, String fileName) {put(key, file, fileName, guessMimeType(fileName));}/** 根据文件名获取MIME类型 */public static MediaType guessMimeType(String fileName) {FileNameMap fileNameMap = URLConnection.getFileNameMap();fileName = fileName.replace("#", "");   //解决文件名中含有#号异常的问题String contentType = fileNameMap.getContentTypeFor(fileName);if (contentType == null) {return HttpParams.MEDIA_TYPE_STREAM;}return MediaType.parse(contentType);}public void put(String key, FileWrapper fileWrapper) {if (key != null && fileWrapper != null) {put(key, fileWrapper.file, fileWrapper.fileName, fileWrapper.contentType);}}public void put(String key, File file, String fileName, MediaType contentType) {if (key != null) {List<FileWrapper> fileWrappers = fileParamsMap.get(key);if (fileWrappers == null) {fileWrappers = new ArrayList<>();fileParamsMap.put(key, fileWrappers);}fileWrappers.add(new FileWrapper(file, fileName, contentType));}}public void putFileParams(String key, List<File> files) {if (key != null && files != null && !files.isEmpty()) {for (File file : files) {put(key, file);}}}public void putFileWrapperParams(String key, List<FileWrapper> fileWrappers) {if (key != null && fileWrappers != null && !fileWrappers.isEmpty()) {for (FileWrapper fileWrapper : fileWrappers) {put(key, fileWrapper);}}}public void removeUrl(String key) {urlParamsMap.remove(key);}public void removeFile(String key) {fileParamsMap.remove(key);}public void remove(String key) {removeUrl(key);removeFile(key);}public void clear() {urlParamsMap.clear();fileParamsMap.clear();}/** 文件类型的包装类 */public static class FileWrapper implements Serializable {private static final long serialVersionUID = -2356139899636767776L;public File file;public String fileName;public transient MediaType contentType;public long fileSize;public FileWrapper(File file, String fileName, MediaType contentType) {this.file = file;this.fileName = fileName;this.contentType = contentType;this.fileSize = file.length();}private void writeObject(ObjectOutputStream out) throws IOException {out.defaultWriteObject();out.writeObject(contentType.toString());}private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();contentType = MediaType.parse((String) in.readObject());}@Overridepublic String toString() {return "FileWrapper{" + //"file=" + file + //", fileName=" + fileName + //", contentType=" + contentType + //", fileSize=" + fileSize +//"}";}}@Overridepublic String toString() {StringBuilder result = new StringBuilder();for (ConcurrentHashMap.Entry<String, List<String>> entry : urlParamsMap.entrySet()) {if (result.length() > 0) result.append("&");result.append(entry.getKey()).append("=").append(entry.getValue());}for (ConcurrentHashMap.Entry<String, List<FileWrapper>> entry : fileParamsMap.entrySet()) {if (result.length() > 0) result.append("&");result.append(entry.getKey()).append("=").append(entry.getValue());}return result.toString();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio 导入依赖报错——Could not find com.xxx,(# fields: 66338 > 65536)

替换项目build.gradle即可 buildscript {repositories {maven{url https://maven.aliyun.com/repository/google}maven{url https://maven.aliyun.com/repository/jcenter} // maven{url https://maven.aliyun.com/nexus/content/groups/public}maven { url "http…

spring-boot-starter-parent

一、你的项目 pom.xml 中有这段代码吗 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version><relativePath/> </parent>idea &…

java学习--基础知识阶段性总结--网络编程

网络编程&#xff1a; 端口&#xff1a; 物理端口&#xff1a; 逻辑端口&#xff1a;用于标识进程的逻辑地址&#xff0c;不同进程的标识&#xff1b;有效端口&#xff1a;0~65535&#xff0c;其中0~1024系统使用或保留端口。 java 中ip对象&#xff1a;InetAddress. import ja…

android 加载显示富文本——TextView显示富文本和WebView显示富文本,WebView显示图片适配屏幕宽度

"connectDeviceLedStatus_dcq":"请先确认设备指示灯为 <strong><font color\"#088A01\">绿灯闪烁</font></strong> 状态。", tv_dev_one_tip1.setText(Html.fromHtml(LangComm.getString("feeder_ble_bind_guide_t…

项目集成Spring Security

前言 之前写的 涂涂影院管理系统 这个 demo 是基于 shiro 来鉴权的&#xff0c;项目前后端分离后&#xff0c;显然集成 Spring Security 更加方便一些&#xff0c;毕竟&#xff0c;都用 Spring 了&#xff0c;权限管理当然 Spring Security. 花了半天时间整理的笔记&#xff0…

android 使用AIDL实现进程间通讯

一、创建服务端 1、首先创建AIDL文件 2、创建service&#xff0c;绑定AIDL接口 3、配置service <service android:name".AidlService"android:enabled"true"android:exported"true"><intent-filter android:priority"1000"&…

大数据入门第二十天——scala入门(二)scala基础02

一、 类、对象、继承、特质 1.类 Scala的类与Java、C的类比起来更简洁 定义&#xff1a; package com.jiangbei //在Scala中&#xff0c;类并不用声明为public。 //Scala源文件中可以包含多个类&#xff0c;所有这些类都具有公有可见性。 class Person {// 定义一个不可变的val…

SpringSecurity 整合 JWT

项目集成Spring Security&#xff08;一&#xff09; 在上一篇基础上继续集成 JWT &#xff0c;实现用户身份验证。 前言 前后端分离项目中&#xff0c;如果直接把 API 接口对外开放&#xff0c;我们知道这样风险是很大的&#xff0c;所以在上一篇中我们引入了 Spring Securit…

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)...

Reference: https://blog.csdn.net/mchdba/article/details/52336203 一个开发同事做了一个框架&#xff0c;里面主键是uuid&#xff0c;我跟他建议说mysql不要用uuid用自增主键&#xff0c;自增主键效率高&#xff0c;他说不一定高&#xff0c;我说innodb的索引特性导致了自增…

String 字符串去除特殊字符和空格,正则表达式使用,%1$s,摄氏度和华氏度相互转换

*华氏度转摄氏度 ℃ (οF - 32) / 1.8 摄氏度转华氏度 F (9/5)*C 32 摄氏度转华氏度 fahrenheit (9/5.0) * wd 32; fahrenheit2 (9/5.0) * wd2 32; int hs (int) fahrenheit; 华氏度转摄氏度 degree (fahrenheit - 32)*5/9; 特殊字符 String tt "sdfdf{fwe }…

Spring Security 认证执行流程

本文基于 Spring Security 5.x 推荐阅读&#xff1a; 项目集成Spring Security SpringSecurity 整合 JWT 一、外层-正常登陆调用 项目启动后会自动寻找 UserDetailsService 实现类&#xff1b; 执行 UserDetailsService 的唯一方法 loadUserByName(String username) 并返回…

ScrollView嵌套ViewPager,ViewPage动态设置高度,嵌套事件冲突——滑动冲突解决方法

1、创建自定义ViewPager public class ViewPagerForScrollView extends ViewPager {int myh0 ;boolean ifme false;public ViewPagerForScrollView(Context context) {super(context);Log.i("lgq","高度111 " );}public ViewPagerForScrollView(Context c…

centos7下python3与python2共存并且开启py3虚拟环境

因为下载视频需要用到python3环境&#xff0c;今天在我的win上安装下载工具死活安装不上去&#xff0c;在大盘鸡上一下就安装成功了...可能在win上不兼容吧...无奈只能在大盘鸡上进行折腾了&#xff0c;顺便几个笔记 由于大盘鸡上好多程序基于python2的&#xff0c;所以就没法直…