撸一个开源网络库

前言

   之前工作的很多时候都是拿来主义,开源库一大堆,总有一款适合你的,但是往往导致很
多时候出现问题不好定位,对于一些底层的业务根本不熟悉,技能无法提升。在此背景下决定撸
一款网络请求库,一方面为了使用方便,另一方面也能更认识网络请求的各个细节,提升自己当
然因为一些思维局限性,难免会存在考虑不周等问题,希望多多理解,后续肯定继续努力。

正文开始

说明
此处为了测试自己撸了个网络测试服务,具体见博客,相关博客连接如下:

自己撸一个网络测试服务

网络库介绍
库名及功能:
Simple的子库Net库,支持httpurlconnection和okhttp两种代理实现
功能主要包括,get请求,post表单,postJson,
post上传文件,post上传多文件,post参数文件混传等。
库地址
Github库:Simple
Gitee库:Simple
Jitpack主页:Simple
使用
maven { url 'https://jitpack.io' }

implementation 'com.github.SnowJun.Simple:Net:1.0.3'
正式开始撸功能
  1. Builder配置:
SimpleNetBuilder builder = new SimpleNetBuilder();
		//设置网络代理	默认为httpurlconnection 目前支持okhttp和httpurlconnection两种
        builder.setNetAgency(NetAgencyEnum.AGENCY_HTTPURLCONNECTION)
        //添加公共header请求
                .addHeader("header", "xxxxx")
                //连接超时时间 单位毫秒
                .connectTimeOut(10000)
                //读超时时间
                .readTimeOut(10000)
                //写超时时间
                .writeTimeOut(10000)
                //一键https
                .https()
                //请求重试次数
                .retryCount(3);
                //使用builder初始化
        SimpleNet.getInstance().init(builder);
  1. Get请求
 Map<String, String> paras = new HashMap<>();
        paras.put("id", "id111");
        paras.put("code", "code222");
        SimpleNet.get(URL + "/info").paras(paras).excute(new StringCallBack() {
            @Override
            public void onSuccess(String result) {
                tvContent.setText(result);
            }

            @Override
            public void onFail(String reason) {
                SimpleLog.e("onFail:reason->" + reason);
            }

            @Override
            public void onException(Exception e) {
                SimpleLog.e("onException:e->" + e.getMessage());
            }
        });
        tvContent.setText("请求中,请稍后...");
  1. Post表单参数,addHeader添加请求头
 Map<String, String> paras = new HashMap<>();
        paras.put("userName", "snowjun");
        paras.put("password", "123456");
        SimpleNet.postForm(URL + "/login").addHeader("session","aaaaa-bbbbb").paras(paras).excute(new StringCallBack() {
            @Override
            public void onSuccess(String result) {
                tvContent.setText(result);
            }

            @Override
            public void onFail(String reason) {
                SimpleLog.e("onFail:reason->" + reason);
            }

            @Override
            public void onException(Exception e) {
                SimpleLog.e("onException:e->" + e.getMessage());
            }
        });
        tvContent.setText("请求中,请稍后...");
  1. Post Json请求
  JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("userName", "SnowJun");
            jsonObject.put("password", "123456");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        SimpleNet
                .<JSONObject>postJson(URL + "login1")
                .json(jsonObject)
                .excute(new StringCallBack() {
                    @Override
                    public void onSuccess(String result) {
                        tvContent.setText(result);
                    }

                    @Override
                    public void onFail(String reason) {
                        SimpleLog.e("onFail:reason->" + reason);
                    }

                    @Override
                    public void onException(Exception e) {
                        SimpleLog.e("onException:e->" + e.getMessage());
                    }
                });
        tvContent.setText("请求中,请稍后...");
  1. Post上传文件
        SimpleNet.postFile(URL + "/uploadFile").file(file).excute(new StringCallBack() {
            @Override
            public void onSuccess(String result) {
                tvContent.setText(result);
            }

            @Override
            public void onFail(String reason) {
                SimpleLog.e("onFail:reason->" + reason);
            }

            @Override
            public void onException(Exception e) {
                SimpleLog.e("onException:e->" + e.getMessage());
            }
        });
        tvContent.setText("文件上传中..");
  1. Post上传多文件
 MultiRequest request = SimpleNet.postMulti(URL + "/uploadFiles");
        request.addFiles("files", files);
        request.excute(new StringCallBack() {
            @Override
            public void onSuccess(String result) {
                tvContent.setText(result);
            }

            @Override
            public void onFail(String reason) {
                SimpleLog.e("onFail:reason->" + reason);
            }

            @Override
            public void onException(Exception e) {
                SimpleLog.e("onException:e->" + e.getMessage());
            }
        });
        tvContent.setText("多文件上传中..");
  1. Post参数文件混传
   SimpleNet.postMulti(URL + "/uploadAndLogin")
                .addParas("userName","snowjun")
                .addParas("password","123456").addFile("file",file).excute(new StringCallBack() {
            @Override
            public void onSuccess(String result) {
                tvContent.setText(result);
            }

            @Override
            public void onFail(String reason) {
                SimpleLog.e("onFail:reason->" + reason);
            }

            @Override
            public void onException(Exception e) {
                SimpleLog.e("onException:e->" + e.getMessage());
            }
        });
        tvContent.setText("文件上传中..");
  1. Bitmap返回
 SimpleNet.get("").excute(new BitmapCallback() {
            @Override
            public void onSuccess(Bitmap result) {
                
            }

            @Override
            public void onFail(String reason) {

            }

            @Override
            public void onException(Exception e) {

            }
        });
  1. File返回
 SimpleNet.get("").excute(new FileCallBack("","") {
            @Override
            public void onProgress(int progress, long current, long size) {
                
            }

            @Override
            public void onSuccess(File result) {

            }

            @Override
            public void onFail(String reason) {

            }

            @Override
            public void onException(Exception e) {

            }
        });
混淆
-dontwarn org.simple.net.** 
-keep class org.simple.net.**{*;}

okhttp -dontwarn okhttp3.** 
-keep class okhttp3.**{*;}

okio -dontwarn okio.** 
-keep class okio.**{*;}
总结
1、整体介绍基本到这里。
2、通过撸这个网络库,对网络请求、各种转换、报文格式等等有了更深刻的认识。
3、后台测试和库是一个人撸出来的,有时候难免会有思维局限,多多理解,如遇到问题,欢迎大家反馈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值