Browse Source

Update doc

drake 3 years ago
parent
commit
4a0ab87e15

+ 10 - 8
README.md

@@ -32,29 +32,31 @@ Net 3.x 版本使用OkHttp+协程实现, 可指定其OkHttp版本
 
 <br>
 <p align="center"><strong>欢迎贡献代码/问题</strong></p>
-<br>
 
-主要功能
+## 特点
 
 - 开发速度No.1
-- 高质量源码/注释/文档/示例
 - 专为Android而生
 - 支持OkHttp所有功能/组件
-- DSL作用域编程
+- DSL编程用法
+- 高质量源码/注释/文档/示例
+
+## 主要功能
+
 - 协程并发(不会协程也可上手)
 - 并发/串行/队列/同步请求
 - 快速切换线程
 - 全局错误处理
 - 协程作用域支持错误和结束回调
-- JSON/Protocol/任何数据解析的转换器
-- 网络请求返回指定泛型(String/Response/File/List/Map/Pair...)
+- 解析任何数据(json/protocol...)的转换器
+- 泛型指定网络请求返回任何类型
 - 自动处理下拉刷新和上拉加载
 - 自动处理分页加载
 - 自动缺省页
 - 自动处理生命周期
 - 自动处理加载对话框
 - 自动错误信息吐司
-- 自动异常捕获(定位请求代码位置)
+- 自动异常捕获(定位请求位置)
 - 支持ViewModel
 - Request携带数据(setExtra/tagOf)
 - Request支持Id/Group分组
@@ -62,7 +64,7 @@ Net 3.x 版本使用OkHttp+协程实现, 可指定其OkHttp版本
 - 并发请求返回最快请求结果
 - 全局取消请求/自动取消请求
 - Https快速配置
-- Cookie管理
+- Cookie持久化管理
 - 强制缓存模式/自定义缓存Key/LRU缓存算法/缓存任何类型
 - 缓存+网络双重读取(预览模式实现)
 - 内置超强轮询器(计时器)

+ 1 - 1
docs/auto-dialog.md

@@ -44,7 +44,7 @@ scopeDialog(dialog) {
 
 === "初始配置全局加载框"
     ```kotlin
-    NetConfig.initialize("http://github.com/") {
+    NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
             setDialogFactory { // 全局加载对话框
                 ProgressDialog(it).apply {
                     setMessage("我是全局自定义的加载对话框...")

+ 19 - 3
docs/cache.md

@@ -10,7 +10,7 @@
 
 不配置缓存设置是不会触发缓存的
 ```kotlin
-NetConfig.initialize("https://github.com/liangjingkanji", this) {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/", this) {
     // ...
     // 本框架支持Http缓存协议和强制缓存模式
     cache(Cache(cacheDir, 1024 * 1024 * 128)) // 缓存设置, 当超过maxSize最大值会根据最近最少使用算法清除缓存来限制缓存大小
@@ -23,10 +23,26 @@ NetConfig.initialize("https://github.com/liangjingkanji", this) {
 这属于OkHttp默认的Http缓存协议控制, 要求满足一定条件
 
 - 请求方式为Get
+- URL的MD5值作为Key, 所以一旦URL发生改变即不会算同一缓存
 - 存在响应头存在缓存控制: [Cache-Control](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control)
-- URL的MD5值作为Key
 
-考虑到你的后端同事的技术水平可能无法实现标准缓存协议, 下面我们可以使用强制缓存模式来完全由客户端控制缓存
+<br>
+通过指定`CacheControl`也可以控制Http缓存协议(原理是添加请求头)
+
+```kotlin
+scopeNetLife {
+    Post<String>("api") {
+        setCacheControl(CacheControl.FORCE_CACHE) // 强制使用缓存
+        // setCacheControl(CacheControl.FORCE_NETWORK) // 强制使用网络
+        // setCacheControl(CacheControl.Builder().noStore().noCache().build()) // 完全禁止读取/写入缓存
+    }.await()
+}
+```
+
+还可以指定缓存有效期, 更多使用请查看代码或者搜索[Cache-Control](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control)
+
+<br>
+如果你后端同事的技术水平无法实现Http标准缓存协议, 或者你需要缓存Get以外的请求方法. 下面我们介绍使用`强制缓存模式`来完全由客户端控制缓存
 
 ## 强制缓存模式
 

+ 21 - 25
docs/config.md

@@ -10,16 +10,13 @@
             super.onCreate()
     
             // http://google.com/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
-    
-            NetConfig.initialize("http://github.com/", this) {
-    
-                // 超时设置
-                connectTimeout(2, TimeUnit.MINUTES)
-                readTimeout(2, TimeUnit.MINUTES)
-                writeTimeout(2, TimeUnit.MINUTES)
-    
-                setLog(BuildConfig.DEBUG) // 作用域发生异常是否打印
-                setConverter(GsonConvert()) // 转换器
+            NetConfig.initialize("https://github.com/liangjingkanji/Net/", this) {
+                // 超时配置, 默认是10秒, 设置太长时间会导致用户等待过久
+                connectTimeout(30, TimeUnit.SECONDS)
+                readTimeout(30, TimeUnit.SECONDS)
+                writeTimeout(30, TimeUnit.SECONDS)
+                setDebug(BuildConfig.DEBUG)
+                setConverter(SerializationConverter())
             }
         }
     }
@@ -31,30 +28,30 @@
     class App : Application() {
         override fun onCreate() {
             super.onCreate()
-    
             // http://google.com/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
             val okHttpClientBuilder = OkHttpClient.Builder()
-                .setLog(BuildConfig.DEBUG)
-                .setConverter(GsonConvert())
+                .setDebug(BuildConfig.DEBUG)
+                .setConverter(SerializationConverter())
                 .addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
     
-            NetConfig.initialize("http://github.com/", okHttpClientBuilder)
+            NetConfig.initialize("https://github.com/liangjingkanji/Net/", okHttpClientBuilder)
         }
     }
     ```
 
 > 配置都是可选项, 不是不初始化就不能使用. 在Xposed项目中可能需要使用 `NetConfig.app = this`
 
-在initNet函数作用域中的this属于`OkHttpClient.Builder()`, 可以配置任何OkHttp参数选项
+在initNet函数作用域中的this属于`OkHttpClient.Builder()`, 可以配置任何OkHttpClient.Builder的属性以外还支持以下Net独有配置
 
 | 函数 | 描述 |
 |-|-|
-| setLog | 输出网络异常日志 |
-| setHost | 全局域名, 和NetConfig.initialize("Host")函数中的第一个参数等效 |
-| setConverter | [转换器](converter.md), 将网络返回的数据转换成你想要的数据结构 |
-| setRequestInterceptor | [请求拦截器](interceptor.md), 用于添加全局请求头/参数 |
-| setErrorHandler | [全局错误处理](error-handle.md) |
-| setDialogFactory | [全局对话框](auto-dialog.md) |
+| setDebug | 是否输出网络日志, 和`LogRecordInterceptor`互不影响  |
+| setSSLCertificate | 配置Https证书 |
+| trustSSLCertificate | 信任所有Https证书 |
+| setConverter | [配置数据转换器](converter.md), 将网络返回的数据转换成你想要的数据结构 |
+| setRequestInterceptor | [配置请求拦截器](interceptor.md), 适用于添加全局请求头/参数 |
+| setErrorHandler | [配置全局错误处理](error-global.md) |
+| setDialogFactory | [配置全局对话框](auto-dialog.md) |
 
 ## 重试次数
 
@@ -63,7 +60,7 @@
 但是个别开发者需求指定重试次数则可以添加`RetryInterceptor`拦截器即可实现失败以后会重试指定次数
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     // ... 其他配置
     addInterceptor(RetryInterceptor(3)) // 如果全部失败会重试三次
 }
@@ -77,10 +74,9 @@ NetConfig.initialize("http://github.com/") {
 例如Retrofit的动态`baseURL`功能就可以直接修改`NetConfig.host`
 
 ```kotlin
-NetConfig.host = "https://github.com/"
+NetConfig.host = "https://github.com/liangjingkanji/Net/"
 ```
 
-<img src="https://s2.loli.net/2022/02/23/1n8djBbypHYTta9.png" width="480"/>
 
 ## 动态域名
 
@@ -88,7 +84,7 @@ NetConfig.host = "https://github.com/"
 
 ```kotlin
 scopeNetLife {
-    val data = Get<String>("http://www.baidu.com/").await()
+    val data = Get<String>("https://github.com/liangjingkanji/Net/").await()
 }
 ```
 

+ 1 - 1
docs/converter.md

@@ -70,7 +70,7 @@ scopeNetLife {
 
 === "全局"
     ```kotlin hl_lines="2"
-    NetConfig.initialize("http://github.com/") {
+    NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
         setConverter(SerializationConverter())
     }
     ```

+ 12 - 13
docs/cookie.md

@@ -1,17 +1,9 @@
 Net使用的是OkHttp的Cookie管理方案(CookieJar), 并且提供持久化存储的Cookie管理实现(PersistentCookieJar)
 
 ```kotlin
-class App : Application() {
-
-    override fun onCreate() {
-        super.onCreate()
-
-        NetConfig.initialize("http://github.com/", this) {
-            // 添加持久化Cookie
-            cookieJar(PersistentCookieJar(this@App))
-        }
-
-    }
+NetConfig.initialize("https://github.com/liangjingkanji/Net/", this) {
+    // 添加持久化Cookie
+    cookieJar(PersistentCookieJar(this@App))
 }
 ```
 
@@ -21,7 +13,14 @@ PersistentCookieJar可以手动增删Cookie
 |-|-|
 | addAll | 添加Cookie |
 | getAll | 获取某个域名的所有Cookie |
-| remove | 删除某个域名下 |
-| clear | 删除应用全部Cookie |
+| remove | 删除某个域名下所有或者指定名称的Cookie |
+| clear | 删除客户端全部Cookie |
+
+
+你可以通过客户端可以获取到已设置的cookieJar
+```kotlin
+(NetConfig.okHttpClient.cookieJar as? PersistentCookieJar)?.clear()
+```
 
+<br>
 PersistentCookieJar使用数据库实现Cookies存储, 你可以指定`dbName`来创建不同的数据库让不同的客户端隔绝Cookie共享

+ 1 - 1
docs/coroutine-request.md

@@ -12,7 +12,7 @@ Net在2.0开始引入协程来支持并发和异步, 虽然很多网络框架支
 val job = scopeNetLife {
     repeat(10000) {
         // 这里将返回的数据显示在TextView上
-        tvFragment.text = Get<String>("http://www.baidu.com/").await()
+        tvFragment.text = Get<String>("https://github.com/liangjingkanji/Net/").await()
     }
 }
 ```

+ 1 - 1
docs/download-file.md

@@ -27,7 +27,7 @@ Download函数一调用就会开始执行下载文件请求, 然后`await`则会
     ```
 
 === "下载并安装"
-    ```kotlin hl_lines="7"
+    ```kotlin
     scopeNetLife {
         Get<File>("https://download.sublimetext.com/Sublime%20Text%20Build%203211.dmg") {
             setDownloadFileName("net.apk")

+ 9 - 7
docs/error-default.md

@@ -1,23 +1,25 @@
 Net具备完善的错误处理机制, 能捕获大部分网络请求或者异步任务导致的崩溃, 减少App崩溃和收集详细的错误信息
 
-以下场景的崩溃会被捕获到
+<br>
+以下场景的抛出的异常会被Net捕获到(不会导致崩溃)
 
-- 作用域内部 (scope**等函数大括号`{}`内部)
-- 拦截器中 (Interceptor/RequestInterceptor)
-- 转换器中 (NetConverter)
+1. 作用域内部 (scope**等函数大括号`{}`内部)
+1. 拦截器中 (Interceptor/RequestInterceptor)
+1. 转换器中 (NetConverter)
 
 
 <br>
 
 如果捕获到错误默认会执行以下操作
 
--  `Logcat`中显示详细的异常堆栈信息, 如果想要输出更详细内容请继续阅读
--  `Toast`吐司显示错误文本信息, 如果想要自定义或者国际化错误文本请阅读[自定义错误提示](error_tip)
+-  `Logcat`中会输出详细的异常堆栈信息, 如果想要输出更详细内容请阅读[自定义异常](error-exception.md)
+-  `Toast`吐司错误异常信息, 如果想要自定义或者国际化错误文本请阅读[自定义错误提示](error-tip.md)
 
 <br>
-要改变以上异常处理流程就需要自定义异常处理器
+要改变以上的默认错误处理请阅读阅读[全局错误处理](error-global.md), 默认全局错误处理器实现源码: [NetErrorHandler](https://github.com/liangjingkanji/Net/blob/97c31dddde7ced5aa75411d2581c858ca494669e/net/src/main/java/com/drake/net/interfaces/NetErrorHandler.kt#L18) <br>
 
 
+> 建议在全局错误处理器中将捕获到的Exception(除无网络异常意外)上报到崩溃统计平台
 
 
 

+ 0 - 0
docs/error-implemention.md → docs/error-exception.md


+ 2 - 3
docs/error-global.md

@@ -1,7 +1,7 @@
 Net可以通过实现`NetErrorHandler`接口来监听全局错误处理, 当你通过`setErrorHandler`后Net就不会再执行默认的错误处理了
 
 ```kotlin
-NetConfig.initialize("http://localhost:80/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
 
     setErrorHandler(object : NetErrorHandler() {
         override fun onError(e: Throwable) {
@@ -20,5 +20,4 @@ NetConfig.initialize("http://localhost:80/") {
 |普通网络请求/自动加载框|`onError`| 默认吐司错误信息 |
 |使用自动处理缺省页的作用域|`onStateError`| 仅部分错误信息会吐司, 因为缺省页不需要所有的错误信息都吐司(toast)提示, 因为错误页可能已经展示错误信息, 所以这里两者处理的函数区分. |
 
-> 默认全局处理实现源码: [NetErrorHandler](https://github.com/liangjingkanji/Net/blob/97c31dddde7ced5aa75411d2581c858ca494669e/net/src/main/java/com/drake/net/interfaces/NetErrorHandler.kt#L18)
-> `scope/scopeLife`不会触发任何全局错误NetErrorHandler, 请使用单例错误处理方式`catch`, 因为`scope`用于处理异步任务,不应当用于网络请求
+> `scope/scopeLife`不会触发任何全局错误NetErrorHandler, 请使用单例错误处理方式`catch`, 因为其用于处理异步任务,不应当用于网络请求

+ 15 - 12
docs/error-tip.md

@@ -1,28 +1,31 @@
-如果你仅仅是想修改默认吐司的错误文本信息或者做国际化语言
+网络请求发生错误一定要提示给用户, 提示语一般情况下是可读的语义句
 
-## 复写NetErrorHandler
-这实际上就是自定义全局错误处理. 不过你可以复制默认的实现仅修改下文本信息即可
+如果你是想修改默认吐司的错误文本信息或者做国际化语言可以参考以下方法
 
-<img src="https://s2.loli.net/2022/03/01/mQNuoUwtxfK8P6E.png" width="500"/>
-
-
-## 复写XML
+## 创建多语言
 
-默认错误处理的文本被定义在`strings.xml`中, 我们可以在项目中使用同名覆盖或者多语言
+默认错误处理的文本被定义在`strings.xml`中, 我们可以在项目中创建多语言values来创建同名string实现国际化. 比如英语是`values-en`下创建文件`strings.xml`
 
 ```xml
 <!--网络请求异常-->
-<string name="net_network_error">当前网络不可用</string>
+<string name="net_connect_error">连接网络失败</string>
+<string name="net_networking_error">当前网络不可用</string>
 <string name="net_url_error">请求资源地址错误</string>
 <string name="net_host_error">无法找到指定服务器主机</string>
 <string name="net_connect_timeout_error">连接服务器超时,%s</string>
 <string name="net_download_error">下载过程发生错误</string>
-<string name="net_no_cache_error">读取缓存错误</string>
+<string name="net_no_cache_error">读取缓存失败</string>
 <string name="net_parse_error">解析数据时发生异常</string>
+<string name="request_failure">请求失败</string>
 <string name="net_request_error">请求参数错误</string>
 <string name="net_server_error">服务响应错误</string>
-<string name="net_null_error">数据为空</string>
+<string name="net_null_error">发生空异常</string>
 <string name="net_error">未知网络错误</string>
 <string name="net_other_error">未知错误</string>
 <string name="no_error_message">无错误信息</string>
-```
+```
+
+## 创建NetErrorHandler
+这实际上就是[自定义全局错误处理](error-global.md), 不过你可以复制默认的实现仅修改下文本信息即可
+
+<img src="https://s2.loli.net/2022/03/01/mQNuoUwtxfK8P6E.png" width="500"/>

+ 1 - 1
docs/exception-track.md

@@ -20,7 +20,7 @@ scopeNetLife {
 在初始化时候可以关闭日志打印
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     setDebug(false) // 关闭日志, 我们一般使用 BuildConfig.DEBUG
 }
 ```

+ 5 - 5
docs/https.md

@@ -8,7 +8,7 @@ Https如果是使用的CA颁发的证书, 不需要任何配置Net可以直接
 
 ```kotlin
 scopeNetLife {
-    tvFragment.text = Get<String>("https://github.com/").await()
+    tvFragment.text = Get<String>("https://github.com/liangjingkanji/Net/").await()
 }
 ```
 
@@ -19,7 +19,7 @@ scopeNetLife {
 === "全局配置"
 
     ```kotlin
-    NetConfig.initialize("https://www.google.com/"){
+    NetConfig.initialize("https://github.com/liangjingkanji/Net/"){
         trustSSLCertificate() // 信任所有证书
     }
     ```
@@ -27,7 +27,7 @@ scopeNetLife {
 
     ```kotlin
     scopeNetLife {
-        Get<String>("https://github.com/"){
+        Get<String>("https://github.com/liangjingkanji/Net/"){
           setClient {
               trustSSLCertificate()
           }
@@ -42,7 +42,7 @@ scopeNetLife {
 === "全局配置"
 
     ```kotlin
-    NetConfig.initialize("http://github.com/") {
+    NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
         val privateCertificate = resources.assets.open("https.certificate")
         setSSLCertificate(privateCertificate)
     }
@@ -52,7 +52,7 @@ scopeNetLife {
 
     ```kotlin
     scopeNetLife {
-        Get<String>("https://github.com/") {
+        Get<String>("https://github.com/liangjingkanji/Net/") {
             setClient {
                 val privateCertificate = resources.assets.open("https.certificate") // 这里的证书是放到应用的资产目录下
                 setSSLCertificate(privateCertificate)

+ 18 - 19
docs/index.md

@@ -7,11 +7,10 @@
 
 ## 前言
 
-1. 避免写一个函数封装一个请求函数, 避免过度封装 <br>
-2. `Post/Get等`函数属于请求动作. `scope*`等函数属于作用域, 假设你要封装请求尽量封装`请求动作`而不是作用域 <br>
-3. 快速改变项目的请求URL可以URL作为常量写到单一文件将而不建议将所有请求动作写到单一文件
-4. Net支持目前最先进的协程并发网络, 当然即使不会协程也可以使用该框架
-5. 如果你觉得文档看不懂或者有歧义那肯定是作者问题, 请反馈给作者或者自我修订
+1. 建议创建一个Api.kt的`object`单例类存储所有请求路径常量
+1. `Post/Get等`函数属于请求动作. `scope*`等函数属于作用域, 假设你有某个请求需要重复使用建议封装`请求动作`而不是作用域
+1. Net使用目前最先进的协程并发网络, 不会协程也可以使用本框架
+1. 如果你觉得文档看不懂或者有歧义那肯定是作者问题, 请反馈给作者或者自我修订
 
 
 ## 使用
@@ -27,22 +26,22 @@
     ```kotlin
     scopeNetLife { // 创建作用域
         // 这个大括号内就属于作用域内部
-        val data = Get<String>("http://www.baidu.com/").await() // 发起GET请求并返回`String`类型数据
+        val data = Get<String>("https://github.com/liangjingkanji/Net/").await() // 发起GET请求并返回`String`类型数据
     }
     ```
 === "串行请求"
     ```kotlin
     scopeNetLife {
         val data = Get<String>("http://0000www.baidu.com/").await() // 请求A 发起GET请求并返回数据
-        val data = Get<String>("http://www.baidu.com/").await() // 请求B 将等待A请求完毕后发起GET请求并返回数据
+        val data = Get<String>("https://github.com/liangjingkanji/Net/").await() // 请求B 将等待A请求完毕后发起GET请求并返回数据
     }
     ```
 === "并发请求"
     ```kotlin
     scopeNetLife {
         // 以下两个网络请求属于同时进行中
-        val aDeferred = Get<String>("http://www.baidu.com/") // 发起GET请求并返回一个对象(Deferred)表示"任务A"
-        val bDeferred = Get<String>("http://www.baidu.com/") // 发起请求并返回"任务B"
+        val aDeferred = Get<String>("https://github.com/liangjingkanji/Net/") // 发起GET请求并返回一个对象(Deferred)表示"任务A"
+        val bDeferred = Get<String>("https://github.com/liangjingkanji/Net/") // 发起请求并返回"任务B"
 
         // 随任务同时进行, 但是数据依然可以按序返回
         val aData = aDeferred.await() // 等待任务A返回数据
@@ -60,9 +59,9 @@
 ```kotlin hl_lines="3"
 scopeNetLife {
     // 请求A
-    val aDeferred = Get<String>("http://www.baidu.com/").await()
+    val aDeferred = Get<String>("https://github.com/liangjingkanji/Net/").await()
     // 请求B, 由于上面使用`await()`函数, 所以必须等待A请求返回结果后才会执行B
-    val bDeferred = Get<String>("http://www.baidu.com/")
+    val bDeferred = Get<String>("https://github.com/liangjingkanji/Net/")
 
     val bData = bDeferred.await() // 等待任务B返回数据
 }
@@ -90,14 +89,14 @@ Net支持RestFul设计风格
 
 ```kotlin
 scopeNetLife {
-    tvFragment.text = Get<String>("http://www.baidu.com/").await()
-    tvFragment.text = Post<String>("http://www.baidu.com/").await()
-    tvFragment.text = Head<String>("http://www.baidu.com/").await()
-    tvFragment.text = Put<String>("http://www.baidu.com/").await()
-    tvFragment.text = Patch<String>("http://www.baidu.com/").await()
-    tvFragment.text = Delete<String>("http://www.baidu.com/").await()
-    tvFragment.text = Trace<String>("http://www.baidu.com/").await()
-    tvFragment.text = Options<String>("http://www.baidu.com/").await()
+    tvFragment.text = Get<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Post<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Head<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Put<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Patch<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Delete<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Trace<String>("https://github.com/liangjingkanji/Net/").await()
+    tvFragment.text = Options<String>("https://github.com/liangjingkanji/Net/").await()
 }
 ```
 

+ 2 - 2
docs/interceptor.md

@@ -10,7 +10,7 @@ class App : Application() {
     override fun onCreate() {
         super.onCreate()
 
-        NetConfig.initialize("http://github.com/") {
+        NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
             addInterceptor { chain -> chain.proceed(chain.request()) }
         }
     }
@@ -31,7 +31,7 @@ RequestInterceptor属于轻量级的请求拦截器, 在每次请求的时候该
 初始化时添加请求拦截器的示例代码
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     setRequestInterceptor(object : RequestInterceptor {
         override fun interceptor(request: BaseRequest) {
             request.param("client", "Net")

+ 2 - 2
docs/log-recorder.md

@@ -17,7 +17,7 @@
 ## 添加日志拦截器
 
 ```kotlin hl_lines="2"
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     addInterceptor(LogRecordInterceptor(BuildConfig.DEBUG))
 }
 ```
@@ -70,7 +70,7 @@ NetConfig.initialize("http://github.com/") {
 然后初始化时添加自己实现拦截器即可
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     addInterceptor(MyLogRecordInterceptor(BuildConfig.DEBUG))
 }
 ```

+ 3 - 3
docs/okhttp-client.md

@@ -13,7 +13,7 @@ object NetConfig {
 ## 全局OkHttpClient
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     // 此处this即为OkHttpClient.Builder
 }
 ```
@@ -27,7 +27,7 @@ NetConfig.initialize("http://github.com/") {
 
 ```kotlin
 scopeNetLife {
-    tv_response.text = Get<String>("https://github.com/") {
+    tv_response.text = Get<String>("https://github.com/liangjingkanji/Net/") {
         setClient {
             // 此处this即为OkHttpClient.Builder
             trustCertificate()
@@ -40,7 +40,7 @@ scopeNetLife {
 
 ```kotlin
 scopeNetLife {
-    tv_response.text = Get<String>("https://github.com/") {
+    tv_response.text = Get<String>("https://github.com/liangjingkanji/Net/") {
         okHttpClient = OkHttpClient.Builder().build()
     }.await()
 }

+ 1 - 1
docs/read-cache.md

@@ -3,7 +3,7 @@ Net_v2基于[Kalle](https://github.com/yanzhenjie/Kalle)开发, 支持Kalle的9
 缓存模式要求在初始化的时候开启
 
 ```kotlin
-NetConfig.initialize("http://github.com/") {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
     cacheEnabled() // 开启缓存
 }
 ```

+ 2 - 2
docs/request.md

@@ -33,7 +33,7 @@ scopeNetLife {
 ```kotlin
 scopeNetLife { // 创建作用域
     // 这个大括号内就属于作用域内部
-    val data = Get<String>("http://www.baidu.com/"){
+    val data = Get<String>("https://github.com/liangjingkanji/Net/"){
         param("u_name", "drake")
         param("pwd", "123456")
     }.await() // 发起GET请求并返回`String`类型数据
@@ -142,7 +142,7 @@ scopeNetLife {
 对于动态生成的全局请求头或参数都可以通过实现`RequestInterceptor`来设置全局的请求拦截器来添加, 如果RequestInterceptor不满足你的需求可以使用拦截器(Interceptor)来实现
 
 ```kotlin
-NetConfig.initialize("http://github.com/", this) {
+NetConfig.initialize("https://github.com/liangjingkanji/Net/", this) {
     // 添加请求拦截器, 每次请求都会触发的, 可配置全局/动态参数
     setRequestInterceptor(MyRequestInterceptor())
 }

+ 2 - 2
docs/tag.md

@@ -1,7 +1,7 @@
 Net支持两种类型数据贯穿整个请求流程(请求 -> 拦截器 -> 转换器)
 
-- Tag: `HashMap<Class<*>, Any?>` 标签
-- Extra: `HashMap<String, Any?>` 额外数据
+- tag: `HashMap<Class<*>, Any?>` 标签
+- extra: `HashMap<String, Any?>` 额外数据
 
 > 他们的区别是key是Class还是String类型, 具体使用哪一种请根据自己方便来
 

+ 53 - 53
docs/updates.md

@@ -1,5 +1,6 @@
 ## 3.4.5
 - Fixed [#88](https://github.com/liangjingkanji/Net/issues/80)
+- Interval.life(Fragment)改为onDestroyView时销毁
 
 ## 3.4.4
 - 新增Cookie管理
@@ -22,9 +23,9 @@
 - 新增预览模式(可实现缓存+网络)
 
 ## 3.3.1
-废弃部分日志相关函数
-新增Net.debug日志输出函数
-修复Query编码问题
+- 废弃部分日志相关函数
+- 新增Net.debug日志输出函数
+- 修复Query编码问题
 
 ## 3.3.0
 - 删除Callback/onResult(破坏性迁移)
@@ -88,98 +89,97 @@
 修复上传文件包含参数时, 编码问题导致的参数错误
 
 ## 3.0.23
-1. 修复轮询器重复start无效问题
-2. Interval其他优化
+- 修复轮询器重复start无效问题
+- Interval其他优化
 
 ## 3.0.21
-Interval添加cancel函数用于取消计时器, 取消完成不会调用finish
+- Interval添加cancel函数用于取消计时器, 取消完成不会调用finish
 
 ## 3.0.20
-1. 新增`HttpFailureException`及其子类表示请求失败异常
-1. 新增`HttpResponseException`及其子类表示请求成功后发生的异常
-1. 更新依赖库BRV至1.3.31
+- 新增`HttpFailureException`及其子类表示请求失败异常
+- 新增`HttpResponseException`及其子类表示请求成功后发生的异常
+- 更新依赖库BRV至1.3.31
 
 ## 3.0.19
-更新依赖库BRV至1.3.30
+- 更新依赖库BRV至1.3.30
 
 ## 3.0.18
-修复Response流异常关闭问题
+- 修复Response流异常关闭问题
 
 ## 3.0.17
-修复Profiler导致的请求问题
+- 修复Profiler导致的请求问题
 
 ## 3.0.16
-日志记录器中请求参数默认使用URLDecoder解码
+- 日志记录器中请求参数默认使用URLDecoder解码
 
 ## 3.0.15
-1. 修复FileProvider冲突
-2. 上传文件时默认生成filename(当你未指定文件名情况下)
-3. NetCallback网络请求被取消不会回调onError
-4. 为NetCallback添加Request对象
-5. 删除内部Tooltip依赖
+- 修复FileProvider冲突
+- 上传文件时默认生成filename(当你未指定文件名情况下)
+- NetCallback网络请求被取消不会回调onError
+- 为NetCallback添加Request对象
+- 删除内部Tooltip依赖
 
 
 ## 3.0.14
-1. 修复KType类型问题
-2. 支持`File.install`函数安装应用
+- 修复KType类型问题
+- 支持`File.install`函数安装应用
 
 ## 3.0.13
-1. 优化标签相关函数. 整个网络生命周期可以完美传递参数
-2. NetCallback具备跟随生命周期自动取消网络请求
-3. 扩展NetCallback来添加DialogCallback/StateCallback/PageCallback
-4. 废弃部分函数, 例如onDialog被废弃, 现在由`NetConfig.dialogFactory`构建全局加载对话框
-5. initNet现在废弃, 由`NetConfig.initialize`取代. 所有配置信息由NetConfig承载
-5. RequestParamsException添加错误码信息
+- 优化标签相关函数. 整个网络生命周期可以完美传递参数
+- NetCallback具备跟随生命周期自动取消网络请求
+- 扩展NetCallback来添加DialogCallback/StateCallback/PageCallback
+- 废弃部分函数, 例如onDialog被废弃, 现在由`NetConfig.dialogFactory`构建全局加载对话框
+- initNet现在废弃, 由`NetConfig.initialize`取代. 所有配置信息由NetConfig承载
+- RequestParamsException添加错误码信息
 
 ## 3.0.12
-修复转换器抛出的异常全部被`ConvertException`包裹的问题.
-
-NetException子类不会被ConvertException包裹, 所以要捕获转换器中的自定义异常请其继承NetException
+- 修复转换器抛出的异常全部被`ConvertException`包裹的问题
+- NetException子类不会被ConvertException包裹, 所以要捕获转换器中的自定义异常请其继承NetException
 
 ## 3.0.11
-1. 修复临时下载文件错误问题
-2. 修复ViewModel作用域复用问题
+- 修复临时下载文件错误问题
+- 修复ViewModel作用域复用问题
 
 ## 3.0.10
-升级Tooltip依赖, 解决使用Tooltip_V1.1.1依赖时Net存在崩溃问题
+- 升级Tooltip依赖, 解决使用Tooltip_V1.1.1依赖时Net存在崩溃问题
 
 ## 3.0.9
-1. 优化转换器异常处理
-2. 转换器支持非固定格式Json解析
+- 优化转换器异常处理
+- 转换器支持非固定格式Json解析
 
 ## 3.0.7
-1. 修复未知的TypeToken访问权限问题
+- 修复未知的TypeToken访问权限问题
 
 ## 3.0.6
-1. 所有Json解析框架都可以解析`List<UserModel>`等嵌套泛型数据结构: [特殊结构解析](convert-special.md)
+- 所有Json解析框架都可以解析`List<UserModel>`等嵌套泛型数据结构: [特殊结构解析](convert-special.md)
 
 ## 3.0.5
-1. 修复Path编码问题
-2. 上传File自动识别MediaType
+- 修复Path编码问题
+- 上传File自动识别MediaType
 
 ## 3.0.4
-1. 添加MediaConst表示常用MediaType
-2. OkHttpBuilder添加`setErrorHandler`取代onError/onStateError: [全局错误处理](error-handle.md)
-3. 提供兼容Android4.4(API level 19)的版本: [Net-okhttp3](https://github.com/liangjingkanji/Net-okhttp3)
+- 添加MediaConst表示常用MediaType
+- OkHttpBuilder添加`setErrorHandler`取代onError/onStateError: [全局错误处理](error-handle.md)
+- 提供兼容Android4.4(API level 19)的版本: [Net-okhttp3](https://github.com/liangjingkanji/Net-okhttp3)
 
 ## 3.0.3
-1. 添加`onResult`函数来执行队列请求: [队列请求](callback.md#onresult)
-2. 添加`toResult`函数来执行同步请求: [同步请求](sync-request.md)
-3. 请求体日志支持JSON/文本类型
-4. LogRecordInterceptor暴露`requestString/responseString`实现函数用于继承实现自定义需求
+- 添加`onResult`函数来执行队列请求: [队列请求](callback.md#onresult)
+- 添加`toResult`函数来执行同步请求: [同步请求](sync-request.md)
+- 请求体日志支持JSON/文本类型
+- LogRecordInterceptor暴露`requestString/responseString`实现函数用于继承实现自定义需求
 
 
 ## 3.0.2
 修复多渠道无法安装问题
 
 ## 3.0.1
-1. 转换器支持KType, 解决JAVA泛型擦除问题
-2. 支持kotlin-serialization转换器
-3. 修复JSON请求参数类型问题
+- 转换器支持KType, 解决JAVA泛型擦除问题
+- 支持kotlin-serialization转换器
+- 修复JSON请求参数类型问题
 
 ## 3.0
-1. 重构代码, 提升稳定性和安全性.
-2. 支持OkHttp的所有函数/组件, 可独立升级OkHttp版本
-3. 更加强大的下载功能
-4. 所有IO读写使用OKIO
-5. 更加优雅的函数设计
+- 重构代码, 提升稳定性和安全性.
+- 支持OkHttp的所有函数/组件, 可独立升级OkHttp版本
+- 更加强大的下载功能
+- 所有IO读写使用OKIO
+- 更加优雅的函数设计

+ 12 - 12
mkdocs.yml

@@ -36,6 +36,7 @@ markdown_extensions:
 nav:
   - 使用: index.md
   - 协程请求: coroutine-request.md
+  - 作用域: scope.md
   - 同步请求: sync-request.md
   - 请求参数: request.md
   - 全局配置: config.md
@@ -49,33 +50,32 @@ nav:
       - 自动缺省页: auto-state.md
       - 自动下拉刷新: auto-refresh.md
       - 自动分页加载: auto-page.md
-  - 创建作用域: scope.md
-  - ViewModel: view-model.md
   - 切换线程: switch-thread.md
-  - OkHttpClient: okhttp-client.md
+  - ViewModel: view-model.md
+  - 异常追踪: exception-track.md
   - 错误处理:
-      - 默认错误: error-default.md
-      - 单例错误: error-single.md
-      - 全局错误: error-global.md
+      - 默认错误处理: error-default.md
+      - 单例错误捕获: error-single.md
+      - 全局错误捕获: error-global.md
       - 自定义错误提示: error-tip.md
-      - 自定义错误对象: error-implemention.md
-  - 异常追踪: exception-track.md
+      - 自定义异常: error-exception.md
+  - OkHttpClient: okhttp-client.md
   - 拦截器: interceptor.md
+  - Https证书: https.md
+  - Cookie管理: cookie.md
+  - 缓存: cache.md
   - 标签/额外数据: tag.md
   - 上传文件: upload-file.md
   - 下载文件: download-file.md
   - 进度监听: progress.md
   - 取消请求: cancel.md
-  - Https证书: https.md
-  - Cookie管理: cookie.md
   - 重复请求: unique.md
-  - 缓存: cache.md
   - 自动搜索/筛选: debounce.md
   - 最快请求结果: fastest.md
   - 日志插件: log-recorder.md
   - 通知栏日志: log-notice.md
-  - 轮询器/倒计时: interval.md
   - Callback: callback.md
+  - 轮询器/倒计时: interval.md
   - 常见问题: https://github.com/liangjingkanji/Net/blob/master/docs/issues.md
   - 更新日志: updates.md
   - 3.x文档: api/index.html

+ 1 - 1
sample/src/main/java/com/drake/net/sample/base/App.kt

@@ -45,7 +45,7 @@ class App : Application() {
     override fun onCreate() {
         super.onCreate()
 
-        NetConfig.initialize("http://43.128.31.195/", this) {
+        NetConfig.initialize("http://42.192.180.145/", this) {
 
             // 超时设置
             connectTimeout(30, TimeUnit.SECONDS)