All Projects → tohodog → QSHttp

tohodog / QSHttp

Licence: Apache-2.0 license
Android安卓http/https一句代码联网络框架net framework

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to QSHttp

Android Zblibrary
🔥Android MVP 快速开发框架,做国内 「示例最全面」「注释最详细」「使用最简单」「代码最严谨」的 Android 开源 UI 框架。 🔥An Android MVP Framework with many demos, detailed documents, simple usages and strict codes.
Stars: ✭ 5,000 (+35614.29%)
Mutual labels:  okhttp, fastjson
iMoney
iMoney 金融项目
Stars: ✭ 55 (+292.86%)
Mutual labels:  okhttp
weather
基于MVP的安卓天气demo
Stars: ✭ 49 (+250%)
Mutual labels:  okhttp
MyFrame
一个简易的Android快速开发框架 ,集成了好多大神的框架
Stars: ✭ 13 (-7.14%)
Mutual labels:  okhttp
AvengersChat
💙 Android sample Avengers chat application using Stream Chat SDK based on MVVM (ViewModel, Coroutines, Room, Hilt, Repository) architecture.
Stars: ✭ 350 (+2400%)
Mutual labels:  okhttp
OKHttpLogInterceptor
A Pretty OkHttp Logging Interceptor(一款简洁漂亮的OkHttp Logging拦截器)
Stars: ✭ 16 (+14.29%)
Mutual labels:  okhttp
RxHttp
对RxJava2+Retrofit2+OkHttp3的封装
Stars: ✭ 65 (+364.29%)
Mutual labels:  okhttp
BaseDevelop
an android project for now fashion open source framework
Stars: ✭ 24 (+71.43%)
Mutual labels:  okhttp
gateway
API proxy gateway base on netty and okHttp.
Stars: ✭ 21 (+50%)
Mutual labels:  okhttp
GitMessengerBot-Android
타입스크립트, V8 엔진의 자바스크립트, 파이썬 그리고 Git을 지원하는 최첨단 메신저 봇!
Stars: ✭ 51 (+264.29%)
Mutual labels:  okhttp
WanAndroid
wanandroid的Kotlin版,采用Android X
Stars: ✭ 20 (+42.86%)
Mutual labels:  okhttp
OkHttpUtils
【Deprecated】Android 方便,简洁的OKHttp工具类,支持Model自动解析Json,多图片、多文件上传
Stars: ✭ 28 (+100%)
Mutual labels:  okhttp
OkSimple
OkSimple :powerful and simple okhttp network library
Stars: ✭ 57 (+307.14%)
Mutual labels:  okhttp
springboot-learning-demo
springboot学习示例
Stars: ✭ 17 (+21.43%)
Mutual labels:  fastjson
metrics-okhttp
An OkHttp HTTP client wrapper providing Metrics instrumentation of connection pools, request durations and rates, and other useful information.
Stars: ✭ 18 (+28.57%)
Mutual labels:  okhttp
finch
🖥 Debug menu library for Android apps with supports network activity logging and many other useful features.
Stars: ✭ 42 (+200%)
Mutual labels:  okhttp
android-clean-architecture
🚀🚀🚀 The boilerplate for Android using Kotlin & Clean architecture.
Stars: ✭ 21 (+50%)
Mutual labels:  okhttp
Kriptofolio
Free open source minimalistic cryptocurrencies portfolio app for Android.
Stars: ✭ 79 (+464.29%)
Mutual labels:  okhttp
RxHttp
基于RxJava2+Retrofit+OkHttp4.x封装的网络请求类库,亮点多多,完美兼容MVVM(ViewModel,LiveData),天生支持网络请求和生命周期绑定,天生支持多BaseUrl,支持文件上传下载进度监听,支持断点下载,支持Glide和网络请求公用一个OkHttpClient⭐⭐⭐
Stars: ✭ 25 (+78.57%)
Mutual labels:  okhttp
windigo-android
Windigo is easy to use type-safe rest/http client for android
Stars: ✭ 23 (+64.29%)
Mutual labels:  okhttp

QSHttp

QSHttp fastjson okhttp License

开箱即用,GET,POST,表单,JSON,上传,下载等等统统同一行代码搞定!
AIP精简到极致,调用没有一行多余代码,几乎零成本使用,大道至简

  • 5年实战环境验证迭代,稳定可靠
  • 强大灵活的入参,支持泛型回调,使用简单
  • 可简单实现自动弹加载框,判断业务状态码,弹错误提示
  • 支持多拦截器,可全局配置一些公共鉴权参数
  • 支持异步(回调已在主线程),同步请求
  • 支持自签名,双向https
  • 支持自定义有效时间缓存,错误缓存(联网失败时使用),缓存控制,cookie自动管理
  • 详细的请求信息回调、错误类型(网络链接失败,超时,断网,解析失败,404...)
  • 详细的访问日记打印,非常方便调试
  • 底层支持原生和okhttp

Gradle

//build.gradle
allprojects {
    repositories {
        maven {
            url "https://jitpack.io"
        }
    }
}

//app.gradle
dependencies {
    implementation 'com.github.tohodog:QSHttp:1.5.4'
}

最简单的例子

QSHttp.get("http://xxx").buildAndExecute();

HTTP调试地址

https://api.reol.top/api_test
可接受任何请求,该接口返回用户请求信息

初始化框架

        //初始化框架,调用一次即可,详细配置见#高级配置#
        QSHttp.init(getApplication());

GET

        String url = "https://api.reol.top/api_test";
        //使用泛型回调,自动解析json数据成模型
        QSHttp.get(url)
                .param("name", "QSHttp")
                .buildAndExecute(new QSHttpCallback<BaseModel<User>>() {
                    @Override
                    public void onComplete(BaseModel<User> bean) {
                        //请求解析成功,执行业务逻辑,BaseModel是接口返回数据通用模型
                    }
                    
                    //@Override//需要处理失败可覆盖
                    //public void onFailure(HttpException e) {
                    //    e.show();
                    //}
                });


        public class BeanModel<M> {
            public int status;
            public String msg;
            public M data;
        }

POST (application/x-www-form-urlencoded)

        String url = "https://api.reol.top/api_test";
        //使用原始回调
        QSHttp.post(url)
                .param("userName", 10086)
                .param("password", "qwe123456")
                .buildAndExecute(new HttpCallback() {
                    @Override
                    public void onSuccess(ResponseParams response) {
                        response.string();//响应内容
                    }

                    @Override
                    public void onFailure(HttpException e) {
                        e.show();
                    }
                });

POST (application/json)

        String url = "https://api.reol.top/api_test";
        //不同类型请求只需改个方法名称即可实现
        QSHttp.postJSON(url)
                .param("userName", "song")
                .param("password", "123456")
                .buildAndExecute(new QSHttpCallback<Bean>() {
                    @Override
                    public void onComplete(Bean dataBean) {

                    }
                });

Download

        //基于get下载
        String url = "https://api.reol.top/api_test";
        QSHttp.download(url,"/sdcard/xxx.txt")
                .buildAndExecute(new HttpCallbackProgress() {
                    @Override
                    public void onProgress(long var1, long var2, String var3) {
                        long i = var1 * 100 / var2;//下载百分比
                    }

                    @Override
                    public void onSuccess(ResponseParams response) {
                        response.file();//获取目录
                    }

                    @Override
                    public void onFailure(HttpException e) {
                        e.show();
                    }
                });

Upload (multipart/form-data)

        String url = "https://api.reol.top/api_test";
        QSHttp.upload(url)
                //文本参数
                .param("userName", 10086)
                .param("password", "qwe123456")
                //文件参数
                .param("file", new File("xx.jpg"))
                .param("bytes", new byte[1024])//上传一个字节数组
                //指定上传的文件名,content-type参数
                .multipartBody("icon", "image/*", "icon.jpg", new File("xx.jpg"))
                .multipartBody(new String("icon"), "image/*", "icon2.jpg", new byte[1024])//icon文件数组上传
                .buildAndExecute(new HttpCallbackProgress() {
                    @Override
                    public void onProgress(long rwLen, long allLen, String mark) {
                        int progress=rwLen * 100 / allLen ;//进度百分比,mark=参数名
                    }

                    @Override
                    public void onSuccess(ResponseParams response) {
                        response.string();//获取响应内容
                    }

                    @Override
                    public void onFailure(HttpException e) {
                        e.show();
                    }
                });

实现一个自动弹出加载框,判断业务状态码的Callback

 在实际项目中,和后端交互JSON会有一套标准的格式,如{"status":0,"msg":"OK","data":{}}, 每个请求都判断太过于麻烦,而且也不方便统一处理,下面就实现一个用起来非常愉悦的回调:

public abstract class MyHttpCallback<T> extends QSHttpCallback<T> {

    protected boolean isShow = true;

    public MyHttpCallback() {
        super();
    }

    //在Activity/Fragment/view里调用QSHTTP可不传入context,会自动反射获取
    public MyHttpCallback(boolean isShow) {
        this.isShow = isShow;
    }

    public MyHttpCallback(Activity activity, boolean isShow) {
        super(activity);
        this.isShow = isShow;
    }

    @Override//这里开发者根据自己的情况修改键值即可
    public T map(String response) throws HttpException {
        JSONObject jsonObject = JSON.parseObject(response);
        //服务器状态码不对
        if (jsonObject.getIntValue("status") != 0) {
            throw HttpException.Custom(jsonObject.getString("msg"), jsonObject);
        }
        //这里可以继续加统一的处理代码,如登录失效
        
        return parserT(jsonObject.getString("data"));
    }


    @Override
    public void onFailure(HttpException e) {
        if (activity != null) Toast.makeText(activity, e.getPrompt(), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart() {
        showProgressDialog(false);
    }

    @CallSuper
    @Override
    public void onEnd() {
        dismissProgressDialog();
    }


    protected ProgressDialog mDialog;

    /**
     * 用于显示Dialog
     */
    protected void showProgressDialog(boolean mCancelable) {
        if (isShow && mDialog == null && activity != null && !activity.isFinishing()) {
            mDialog = new ProgressDialog(activity);
            mDialog.setCancelable(mCancelable);
            if (mCancelable) {
                mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialogInterface) {
                    }
                });
            }
            mDialog.show();
        }
    }

    protected void dismissProgressDialog() {
        if (isShow && mDialog != null && activity != null && !activity.isFinishing()) {
            mDialog.dismiss();
            mDialog = null;
        }
    }

}

高级配置

        //混淆
        -keep class * extends org.song.http.** { *; }

        //使用配置初始化,全局参数
        QSHttp.init(QSHttpConfig.Build(getApplication())
                //请求host,智能拼接请求地址
                .baseUrl("http://reol.top/api")

                //配置需要签名的网站, 读取assets/cers文件夹里的.cer证书
                //支持双向认证,只需放入xxx.bks,见demo
                .ssl(Utils.getAssetsSocketFactory(this, "cers", "password")
                        , "192.168.1.168")//host参数:设置需要自签名的主机地址,不设置则只能访问.cer证书列表里的https网站
                .hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier())//证书信任规则(全信任)

                .cacheSize(128 * 1024 * 1024)
                .connectTimeout(18 * 1000)
                .debug(true)//打印日记

                //拦截器 全局添加头参数 鉴权
                .interceptor(interceptor)
                .build());

        //拦截器
        static Interceptor interceptor = new Interceptor() {
                @Override
                public ResponseParams intercept(Chain chain) throws HttpException {
                    RequestParams r = chain.request()
                            .newBuild()
                            .header("Interceptor", "Interceptor")//全局头参数
                            //继续添加修改其他
                            .build();
                    return chain.proceed(r);//请求结果参数如有需要也可以进行修改
                }
            };
         
        //添加不同配置的client,满足不同需求
        QSHttp.addClient("test", QSHttpConfig.Build(getApplication())
                .xxHttp(HttpEnum.XX_Http.JAVA_HTTP)//使用原生底层实现
                .cacheSize(128 * 1024 * 1024)
                .connectTimeout(10 * 1000)
                .debug(true)
                .build());
        QSHttp.get("url").qsClient("test").buildAndExecute();//该请求将使用上述的配置

所有API一览

        String url = "https://api.reol.top/api_test";
        //同步请求
        Future<ResponseParams> future = QSHttp.get(url).param("future", "future").buildAndExecute();
        ResponseParams res = future.get();//get阻塞

        QSHttp.post(url)//选择请求的类型
                .header("User-Agent", "QsHttp/Android")//添加请求头

                .path(2333, "video")//构建成这样的url https://api.reol.top/api_test/2233/video

                .param("userName", 123456)//键值对参数
                .param("password", "asdfgh")//键值对参数
                .param(new Bean())//键值对参数
                .param("bytes", new byte[1024])//传一个字节数组,multipart支持此参数
                .param("file", new File("xx.jpg"))//传一个文件,multipart支持此参数

                .jsonBody(new Bean())//传入一个对象,会自动转化为json上传;application/json
                //自定义Body的内容 自定义contentType (postjson内部是调用这个实现)
                .requestBody("image/jpeg", new File("xx.jpg"))

                .parser(parser)//自定义解析,由自己写解析逻辑
                .resultByBytes()//请求结果返回一个字节组 默认是返回字符
                .resultByFile(".../1.txt")//本地路径 有此参数 请求的内容将被写入文件

                .errCache()//开启这个 [联网失败]会使用缓存,如果有的话
                .timeOut(10 * 1000)//单独设置超时
                .openServerCache()//开启服务器缓存规则 基于okhttp支持
                .clientCache(24 * 3600)//开启强制缓存,一天内都不会请求了
                .charset("utf-8")//特殊需求可以更改编码
                .tag("no token")//可配合拦截器使用
                //执行联网
                .buildAndExecute(new HttpCallbackEx() {

                    @Override
                    public void onStart() {
                        //开始请求
                    }

                    @Override
                    public void onSuccess(ResponseParams response) {
                        response.string();//获得响应字符串 *默认
                        response.file();//设置了下载 获得路径
                        response.bytes();//设置了返回字节组 获得字节组

                        response.headers();//获得响应头

                        //获得解析的模型
                        Bean b = response.jsonModel(Bean.class);
                    }

                    @Override
                    public void onFailure(HttpException e) {
                        e.show();//弹出错误提示 网络连接失败 超时 404 解析失败 ...等
                        String response = (String) e.getExObject();//可获取非200异常的参数
                    }

                    @Override
                    public void onEnd() {
                        //结束请求
                    }


                    @Override
                    public boolean isDestroy() {
                        return isFinishing();//页面关闭不会回调
                    }
                });

Log

v1.5.4(2020-12-15)

  • 支持baseUrl
  • 更新依赖
  • 优化

v1.5.3(2020-11-27)

  • 支持同步
  • 优化监听回调,url兼容性

v1.5.1(2020-07-03)

  • 支持多网络同时访问(在打开WIFI情况下访问蜂窝网络)
  • 优化

v1.5.0(2019-12-19)

  • 支持多拦截器
  • 支持multipart数组上传

Other

  • 有问题请Add issues
  • 如果项目对你有帮助的话欢迎star
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].