Skip to content
/ yhttp Public

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

Notifications You must be signed in to change notification settings

yutils/yhttp

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,安卓13.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

platform Gradle last commit repo size android studio maven

已经从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线程(主线程)

链式请求举例

//链式请求 java
String url = "http://192.168.6.9:8090/crash/user/login";
Map<String, Object> hashMap = new HashMap<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();

//链式,get
YHttp
.create()
.url("http://192.168.6.9:8090/crash/")
.get()
.setSuccessListener { bytes, value -> textView1.text = "成功:$value" }
.setFailListener { value -> textView2.text = "失败:$value" }
.start()

//链式,post
val url = "http://192.168.6.9:8090/crash/user/login"
val gson=YJson.getGsonDate( "yyyy年MM月dd日 HH:mm:ss")
val hashMap: HashMap<String, Any> = hashMapOf("name" to "yujing", "password" to "wtugeqh")
YHttp.create()
    .url(url)
    .post(hashMap)
    .setGson(gson)
    .setObjectListener(object : ObjectListener<User>() {
        override fun success(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>() {
        override fun success(bytes: ByteArray?, value: User?) {
            textView2.text = "\n对象:${value.toString()}"
        }
    })
    .setFailListener { value -> textView2.text = "失败:$value" }
    .setSessionListener { sessionId -> session = sessionId }
    .start()

java举例

String url = "http://www.xxx.xxx/xxx";

//同步请求get
YHttpBase yHttp = new YHttpBase().setConnectTimeout(3000).setContentType("application/json; charset=utf-8");
String json = new String(yHttp.get(url), StandardCharsets.UTF_8);

//同步请求post
String json = new String(yHttp.post(url,"id=123&name=123".getBytes()), StandardCharsets.UTF_8);

//————————————————异步请求————————————————

//定义地址
String url="http://www.xxx.xxx/getUser";
//请求参数
HashMap <String,Object> paramsMap=new HashMap<>();
paramsMap.put("id","123");

//异步请求,返回字符串,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象
YHttp.create().post(url, paramsMap, new YHttpListener() {
    @Override
    public void success(byte[] bytes, String value) throws Exception {
        //请求结果,文本
    }
    @Override
    public void fail(String value) {
        //错误原因
    }
});


//异步请求,返回返回对象,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象
YHttp.create().post(url, paramsMap, new YObjectListener<User>() {
    @Override
    public void success(byte[] bytes, User value) {
        //请求结果,对象
    }
    @Override
    public void fail(String value) {
        //错误原因
    }
});


//java文件上传,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象
String url = "http://192.168.6.9:8090/crash/upload/file";
List<Upload> uploads = new ArrayList<>();
uploads.add(new Upload("file1", new File("D:/1.jpg")));
uploads.add(new Upload("file2", "ABCDEF".getBytes()).setFilename("abcd.txt"));

YHttp.create().setSessionId(session).upload(url, "", uploads, new YHttpListener() {
    @Override
    public void success(byte[] bytes, String value){
        System.out.println("上传成功:" + value);
    }
    @Override
    public void fail(String value) {
        System.out.println("上传失败:" + value);
    }
});


//文件下载,如是安卓项目返回值自动回到主线程
String url = "https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2020.exe";
File f = new File( "D:/QQ.exe");
YHttp.create().downloadFile(url, f, new YHttpDownloadFileListener (){
    @Override
    public void progress(int downloadSize, int fileSize) {
        double progress = ((int)(10000.0 * downloadSize / fileSize))/100.0;//下载进度,保留2位小数
    }
    @Override
    public void success(File file) {
        //下载完成
    }
    @Override
    public void fail(String value) {
        //下载失败
    }
});

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 {
    override fun success(bytes: ByteArray?, value: String?) {
    //成功
    }
    override fun fail(value: String?) {
    //失败
    }
})
    

//请求返回对象,带上sessionId,如业务操作,如是安卓项目返回值自动回到主线程,监听设置成YHttpListener就返回字符串,监听设置成YObjectListener就返回对象
YHttp.create().setSessionId(session).post(url, map, object : YObjectListener<User>() {
     override fun success(bytes: ByteArray?, value: User?) {
         runOnUiThread(Runnable {
             YToast.show(App.get(), value?.Name)
         })
     }
     override fun fail(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 {
    override fun success(bytes: ByteArray?, value: String?) {
        //成功
    }
    override fun fail(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 {
    override fun progress(downloadSize: Int, fileSize: Int) {
       val progress = (10000.0 * downloadSize / fileSize).toInt() / 100.0 //下载进度,保留2位小数
    }
    override fun success(file: File) {}//下载完成
    override fun fail(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

Watchers

Forks

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy