11# 目录
22
3- > 文档大致分为三类
4-
53* [ 集成文档] ( #集成文档 )
64
75* [ 使用文档] ( #使用文档 )
2321
2422#### 关于 Http 明文请求
2523
26- > Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
24+ * Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
2725如果当前应用的请求是 http 请求,而非 https ,这样就会导系统禁止当前应用进行该请求,如果 WebView 的 url 用 http 协议,同样会出现加载失败,https 不受影响
2826
29- > 在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下
27+ * 在 res 下新建一个 xml 目录,然后创建一个名为:network_security_config.xml 文件 ,该文件内容如下
3028
3129``` xml
3230<?xml version =" 1.0" encoding =" utf-8" ?>
3533</network-security-config >
3634```
3735
38- > 然后在 AndroidManifest.xml application 标签内应用上面的xml配置
36+ * 然后在 AndroidManifest.xml application 标签内应用上面的xml配置
3937
4038``` xml
4139<application
@@ -67,7 +65,7 @@ public class RequestServer implements IRequestServer {
6765
6866#### 框架初始化
6967
70- > 需要配置请求结果处理,具体封装可以参考 [ RequestHandler] ( app/src/main/java/com/hjq/http/demo/http/model/RequestHandler.java )
68+ * 需要配置请求结果处理,具体封装可以参考 [ RequestHandler] ( app/src/main/java/com/hjq/http/demo/http/model/RequestHandler.java )
7169
7270``` java
7371OkHttpClient okHttpClient = new OkHttpClient .Builder ()
@@ -90,13 +88,30 @@ EasyConfig.with(okHttpClient)
9088 .into();
9189```
9290
93- > 上述是创建配置,更新配置可以使用
91+ * 上述是创建配置,更新配置可以使用
9492
9593``` java
9694EasyConfig . getInstance()
9795 .addParam(" token" , data. getData(). getToken());
9896```
9997
98+ #### 混淆规则
99+
100+ ``` groovy
101+ # OkHttp3
102+ -keepattributes Signature
103+ -keepattributes *Annotation*
104+ -keep class okhttp3.** { *; }
105+ -keep interface okhttp3.** { *; }
106+ -dontwarn okhttp3.**
107+ -dontwarn okio.**
108+
109+ # 不混淆这个包下的字段名
110+ -keepclassmembernames class com.hjq.http.demo.http.** {
111+ <fields>;
112+ }
113+ ```
114+
100115# 使用文档
101116
102117#### 配置接口
@@ -142,10 +157,18 @@ public final class LoginApi implements IRequestApi {
142157 * implements IRequestPath:实现这个接口之后可以重新指定这个请求的接口路径
143158
144159 * implements IRequestType:实现这个接口之后可以重新指定这个请求的提交方式
160+
161+ * 字段作为请求参数的衡量标准
162+
163+ * 假设某个字段的属性值为空,那么这个字段将不会作为请求参数发送给后台
164+
165+ * 假设果某个字段类型是 String,属性值是空字符串,那么这个字段就会作为请求参数,如果是空对象则不会
166+
167+ * 假设某个字段类型是 int,因为基本数据类型没有空值,所以这个字段一定会作为请求参数,但是可以换成 Integer 对象来避免,因为 Integer 的默认值是 null
145168
146169#### 发起请求
147170
148- > 需要配置请求状态及生命周期处理,具体封装可以参考 [ BaseActivity] ( app/src/main/java/com/hjq/http/demo/BaseActivity.java )
171+ * 需要配置请求状态及生命周期处理,具体封装可以参考 [ BaseActivity] ( app/src/main/java/com/hjq/http/demo/BaseActivity.java )
149172
150173``` java
151174EasyHttp . post(this )
@@ -161,8 +184,38 @@ EasyHttp.post(this)
161184 });
162185```
163186
187+ * 这里展示 post 用法,另外 EasyHttp 还支持 get、head、delete、put、patch 请求方式,这里不再过多演示
188+
164189#### 上传文件
165190
191+ ``` java
192+ public final class UpdateImageApi implements IRequestApi , IRequestType {
193+
194+ @Override
195+ public String getApi () {
196+ return " upload/" ;
197+ }
198+
199+ @Override
200+ public BodyType getType () {
201+ // 上传文件需要使用表单的形式提交
202+ return BodyType . FORM ;
203+ }
204+
205+ /* * 本地图片 */
206+ private File image;
207+
208+ public UpdateImageApi (File image ) {
209+ this . image = image;
210+ }
211+
212+ public UpdateImageApi setImage (File image ) {
213+ this . image = image;
214+ return this ;
215+ }
216+ }
217+ ```
218+
166219``` java
167220EasyHttp . post(this )
168221 .api(new UpdateImageApi (file))
@@ -174,7 +227,7 @@ EasyHttp.post(this)
174227 }
175228
176229 @Override
177- public void onUpdate ( long totalByte , long updateByte , int progress ) {
230+ public void onProgress ( int progress ) {
178231 mProgressBar. setProgress(progress);
179232 }
180233
@@ -197,7 +250,7 @@ EasyHttp.post(this)
197250
198251#### 下载文件
199252
200- > 下载缓存策略:在指定下载文件 md5 或者后台有返回 md5 的情况下,下载框架默认开启下载缓存模式,如果这个文件已经存在手机中,并且经过 md5 校验文件完整,框架就不会重复下载,而是直接回调下载监听。减轻服务器压力,减少用户等待时间。
253+ * 下载缓存策略:在指定下载文件 md5 或者后台有返回 md5 的情况下,下载框架默认开启下载缓存模式,如果这个文件已经存在手机中,并且经过 md5 校验文件完整,框架就不会重复下载,而是直接回调下载监听。减轻服务器压力,减少用户等待时间。
201254
202255``` java
203256EasyHttp . download(this )
@@ -214,7 +267,7 @@ EasyHttp.download(this)
214267 }
215268
216269 @Override
217- public void onProgress (File file , long totalByte , long downloadByte , int progress ) {
270+ public void onProgress (File file , int progress ) {
218271 mProgressBar. setProgress(progress);
219272 }
220273
@@ -244,7 +297,7 @@ try {
244297 HttpData<SearchBean > data = EasyHttp . post(MainActivity . this )
245298 .api(new SearchBlogsApi ()
246299 .setKeyword(" 搬砖不再有" ))
247- .execute(new DataClass <HttpData<SearchBean > > () {});
300+ .execute(new ResponseClass <HttpData<SearchBean > > () {});
248301 ToastUtils . show(" 请求成功,请看日志" );
249302} catch (Exception e) {
250303 e. printStackTrace();
@@ -582,7 +635,7 @@ EasyConfig.getInstance().setLogEnabled(false);
582635
583636#### 框架指定只能传入 LifecycleOwner,我想传入其他对象怎么办?
584637
585- * 其中 AppCompatActivity 和 AndroidX.Fragment 都是 LifecycleOwner 子类的,这个是毋庸置疑的
638+ * 其中 AndroidX. AppCompatActivity 和 AndroidX.Fragment 都是 LifecycleOwner 子类的,这个是毋庸置疑的
586639
587640* 但是你如果传入的是 Activity 对象,并非 AppCompatActivity 对象,那么你可以这样写
588641
@@ -628,4 +681,34 @@ EasyHttp.cancel(LifecycleOwner lifecycleOwner);
628681EasyHttp . cancel(Object tag);
629682// 取消所有请求
630683EasyHttp . cancel();
631- ```
684+ ```
685+
686+ #### getHost、getPath、getApi 方法之间的作用和区别?
687+
688+ * Host:服务器主机的地址
689+
690+ * Path:除主机地址之外的路径
691+
692+ * Api:业务模块地址
693+
694+ * 我举个栗子:[ https://www.baidu.com/api/user/getInfo ] ( https://www.baidu.com/ ) ,那么标准的写法就是
695+
696+ ``` java
697+ public final class XxxApi implements IRequestServer , IRequestApi {
698+
699+ @Override
700+ public String getHost () {
701+ return " https://www.baidu.com/" ;
702+ }
703+
704+ @Override
705+ public String getPath () {
706+ return " api/" ;
707+ }
708+
709+ @Override
710+ public String getApi () {
711+ return " user/getInfo" ;
712+ }
713+ }
714+ ```
0 commit comments