Skip to content

Repository files navigation

YHttp网络请求,原生JAVA实现,小巧快速

支持原生java工程,原生kotlin工程,安卓工程。

优点:

  • 1.支持get,post,put,delete请求,一行实现同步请求,一行实现异步请求
  • 2.post请求可为字符串,map,byte[]
  • 3.直接返回请求结果为 字符串 或 对象 或 byte[]
  • 4.支持各种格式文件下载,回调进度条
  • 5.单次文件上传请求中可以包含多种不同格式文件
  • 6.日志详细记录请求数据和结果,可关闭日志,异常请求回调异常原因
  • 7.支持https,支持设置ssl文件
  • 8.sessionID的获取和设置,可以切换多个不同sessionID
  • 9.简单好用,作者持续更新
  • 10.支持安卓,请求结果直接回调到UI线程(主线程)
  • 11.自定义gson,如:可以直接序列化指定日期格式的内容
  • 12.链式调用,代码更加简洁,可以不监听失败回调
  • 13.返回数据在logcat中清晰可见,并且可以直接返回对象

采用java17,安卓14.0,API33,androidx。

停更!!!

建议大家使用OKHTTP

Gradle采用java17!!! java17!!!java17!!!

设置方法: Project Structure ----> SDK Location ----> JDK location was moved to Gradle Settings. ----> Gradle JDK ----> JDK17

返回数据调试清晰可见,超长json自动分段打印logcat

logcat

platformGradlelast commitrepo sizeandroid studiomaven

已经从jitpack.io仓库移动至maven中央仓库

releases里面有JAR包。点击前往

Gradle 引用

添加依赖,当前最新版:————> 1.1.4 最新版

dependencies {
//更新地址 https://github.com/yutils/yhttp 建议过几天访问看下有没有新版本
implementation 'com.kotlinx:yhttp:1.1.4'
}

注:如果引用失败,看下面方案

allprojects {
repositories {
//google()
//mavenCentral()
//阿里云镜像
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
//如果还是不容易拉取,可以试试直接用maven.org
maven { url 'https://repo1.maven.org/maven2' }
}

用法举例:

1.java工程中,异步请求,YHttp返回结果在子线程
2.安卓工程中,异步请求,如果在UI线程(主线程)中创建YHttp,将返回结果返回到UI线程(主线程)

链式请求举例

//链式请求 javaStringurl = "http://192.168.6.9:8090/crash/user/login";
Map<String, Object> hashMap = newHashMap<String, Object>();// = hashMapOf("name" to "yujing", "password" to "wtugeqh")hashMap.put("name", "yujing");
hashMap.put("password", "wtugeqh");
YHttp.create()
.url(url)
.post(hashMap)
.setSuccessListener((bytes, value) -> {
System.out.println("请求成功:" + value);
}).start();
//链式,getYHttp
.create()
.url("http://192.168.6.9:8090/crash/")
.get()
.setSuccessListener { bytes, value -> textView1.text = "成功:$value" }
.setFailListener { value -> textView2.text = "失败:$value" }
.start()
//链式,postvalurl = "http://192.168.6.9:8090/crash/user/login"valgson=YJson.getGsonDate( "yyyy年MM月dd日 HH:mm:ss")
valhashMap: HashMap<String, Any> = hashMapOf("name"to"yujing", "password"to"wtugeqh")
YHttp.create()
.url(url)
.post(hashMap)
.setGson(gson)
.setObjectListener(object : ObjectListener<User>() {
overridefunsuccess(bytes: ByteArray?, value: User?) {
textView2.text = "\n对象:${value.toString()}"
}
})
.setFailListener { value -> textView2.text = "失败:$value" }
.start()
//链式,自定义请求YHttp.create()
.url(url)
.method("POST")
.setContentType("application/x-www-form-urlencoded;charset=utf-8")
.addRequestProperty("connection", "Keep-Alive")
.body(hashMap)
.setGson(gson)
.setSessionId(session)
.setCrtSSL("SSL证书内容")
.setSuccessListener { bytes, value -> textView1.text = "成功:$value" }
.setObjectListener(object : ObjectListener<User>() {
overridefunsuccess(bytes: ByteArray?, value: User?) {
textView2.text = "\n对象:${value.toString()}"
}
})
.setFailListener { value -> textView2.text = "失败:$value" }
.setSessionListener { sessionId -> session = sessionId }
.start()

java举例

Stringurl = "http://www.xxx.xxx/xxx";
//同步请求getYHttpBaseyHttp = newYHttpBase().setConnectTimeout(3000).setContentType("application/json; charset=utf-8");
Stringjson = newString(yHttp.get(url), StandardCharsets.UTF_8);
//同步请求postStringjson = newString(yHttp.post(url,"id=123&name=123".getBytes()), StandardCharsets.UTF_8);
//————————————————异步请求————————————————//定义地址Stringurl="http://www.xxx.xxx/getUser";
//请求参数HashMap <String,Object> paramsMap=newHashMap<>();
paramsMap.put("id","123");
//异步请求,返回字符串,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象YHttp.create().post(url, paramsMap, newYHttpListener() {
@Overridepublicvoidsuccess(byte[] bytes, Stringvalue) throwsException {
//请求结果,文本
}
@Overridepublicvoidfail(Stringvalue) {
//错误原因
}
});
//异步请求,返回返回对象,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象YHttp.create().post(url, paramsMap, newYObjectListener<User>() {
@Overridepublicvoidsuccess(byte[] bytes, Uservalue) {
//请求结果,对象
}
@Overridepublicvoidfail(Stringvalue) {
//错误原因
}
});
//java文件上传,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象Stringurl = "http://192.168.6.9:8090/crash/upload/file";
List<Upload> uploads = newArrayList<>();
uploads.add(newUpload("file1", newFile("D:/1.jpg")));
uploads.add(newUpload("file2", "ABCDEF".getBytes()).setFilename("abcd.txt"));
YHttp.create().setSessionId(session).upload(url, "", uploads, newYHttpListener() {
@Overridepublicvoidsuccess(byte[] bytes, Stringvalue){
System.out.println("上传成功:" + value);
}
@Overridepublicvoidfail(Stringvalue) {
System.out.println("上传失败:" + value);
}
});
//文件下载,如是安卓项目返回值自动回到主线程Stringurl = "https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2020.exe";
Filef = newFile( "D:/QQ.exe");
YHttp.create().downloadFile(url, f, newYHttpDownloadFileListener (){
@Overridepublicvoidprogress(intdownloadSize, intfileSize) {
doubleprogress = ((int)(10000.0 * downloadSize / fileSize))/100.0;//下载进度,保留2位小数
}
@Overridepublicvoidsuccess(Filefile) {
//下载完成
}
@Overridepublicvoidfail(Stringvalue) {
//下载失败
}
});

kotlin举例

//当前session值var session =""//请求地址val url ="http://www.xxx.xxx/xxx"//请求参数val hashMap:HashMap<String, Any> = hashMapOf("name" to "abc", "password" to "123456")
//post请求。保存sessionId,如登录,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象YHttp.create().setSessionListener { sessionId ->session = sessionId }.post(url, hashMap, object:YHttpListener {
overridefunsuccess(bytes:ByteArray?, value:String?) {
//成功
}
overridefunfail(value:String?) {
//失败
}
})
//请求返回对象,带上sessionId,如业务操作,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象YHttp.create().setSessionId(session).post(url, map, object:YObjectListener<User>() {
overridefunsuccess(bytes:ByteArray?, value:User?) {
runOnUiThread(Runnable {
YToast.show(App.get(), value?.Name)
})
}
overridefunfail(value:String) {
runOnUiThread(Runnable {
YToast.show(App.get(), value)
})
}
})
//文件上传,并且上次参数请求,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象val url ="http://192.168.6.9:8090/crash/upload/file"val params:HashMap<String, Any> = hashMapOf("name" to "yujing", "password" to "123456")
val list:MutableList<Upload> =ArrayList()
list.add(Upload("file1",file))
list.add(Upload("file2", "ABCDEF".toByteArray()).setFilename("abcd.txt"))
list.add(Upload("file3",bitmap))
//请求YHttp.create().setSessionId(session).upload(url, params, list, object:YHttpListener {
overridefunsuccess(bytes:ByteArray?, value:String?) {
//成功
}
overridefunfail(value:String?) {
//失败
}
})
//文件下载,如是安卓项目返回值自动回到主线程val url ="https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2020.exe"//保存路径var f =File( "D:/BB.exe")
//请求YHttp.create().downloadFile(url, f, object:YHttpDownloadFileListener {
overridefunprogress(downloadSize:Int, fileSize:Int) {
val progress = (10000.0* downloadSize / fileSize).toInt() /100.0//下载进度,保留2位小数
}
overridefunsuccess(file:File) {}//下载完成overridefunfail(value:String) {}//下载出错
})

如安卓中使用注意添加权限:

  • 必须权限 ——> android.permission.INTERNET
  • 返回对象必须引用Gson ——> implementation 'com.google.code.gson:gson:2.8.6'

Github地址:https://github.com/yutils/yhttp

我的CSDN:https://blog.csdn.net/Yu1441

感谢关注微博:细雨若静

About

Http网络请求,使用简单,快速,支持java,kotlin,安卓,一行实现网络请求,支持https、session、get、post、put、delete、多文件上传、文件下载、日志完整显示等。

Topics

Resources

Stars

16 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages