前言
之前工作的很多时候都是拿来主义,开源库一大堆,总有一款适合你的,但是往往导致很
多时候出现问题不好定位,对于一些底层的业务根本不熟悉,技能无法提升。在此背景下决定撸
一款网络请求库,一方面为了使用方便,另一方面也能更认识网络请求的各个细节,提升自己当
然因为一些思维局限性,难免会存在考虑不周等问题,希望多多理解,后续肯定继续努力。
正文开始
说明
此处为了测试自己撸了个网络测试服务,具体见博客,相关博客连接如下:
自己撸一个网络测试服务
网络库介绍
库名及功能:
Simple的子库Net库,支持httpurlconnection和okhttp两种代理实现
功能主要包括,get请求,post表单,postJson,
post上传文件,post上传多文件,post参数文件混传等。
库地址
使用
maven { url 'https://jitpack.io' }
implementation 'com.github.SnowJun.Simple:Net:1.0.3'
正式开始撸功能
- Builder配置:
SimpleNetBuilder builder = new SimpleNetBuilder();
builder.setNetAgency(NetAgencyEnum.AGENCY_HTTPURLCONNECTION)
.addHeader("header", "xxxxx")
.connectTimeOut(10000)
.readTimeOut(10000)
.writeTimeOut(10000)
.https()
.retryCount(3);
SimpleNet.getInstance().init(builder);
- 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("请求中,请稍后...");
- 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("请求中,请稍后...");
- 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("请求中,请稍后...");
- 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("文件上传中..");
- 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("多文件上传中..");
- 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("文件上传中..");
- Bitmap返回
SimpleNet.get("").excute(new BitmapCallback() {
@Override
public void onSuccess(Bitmap result) {
}
@Override
public void onFail(String reason) {
}
@Override
public void onException(Exception e) {
}
});
- 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、后台测试和库是一个人撸出来的,有时候难免会有思维局限,多多理解,如遇到问题,欢迎大家反馈。