diff --git a/docs/auto-dialog.md b/docs/auto-dialog.md index cbab287eb..f357550ea 100644 --- a/docs/auto-dialog.md +++ b/docs/auto-dialog.md @@ -5,8 +5,8 @@ Net支持发起请求开始时显示加载框, 请求结束时隐藏加载框( ```kotlin hl_lines="1" scopeDialog { - tvFragment.text = Post("dialog") { - param("u_name", "drake") // 请求参数 + tvFragment.text = Post(Api.PATH) { + param("username", "用户名") // 请求参数 param("pwd", "123456") }.await() } @@ -27,8 +27,8 @@ scopeDialog { val dialog = BubbleDialog(requireActivity(), "加载中") scopeDialog(dialog) { - binding.tvFragment.text = Post("dialog") { - param("u_name", "drake") + binding.tvFragment.text = Post(Api.PATH) { + param("username", "用户名") param("pwd", "123456") }.await() } diff --git a/docs/auto-pull.md b/docs/auto-pull.md index 4e6746972..fdb2990f8 100644 --- a/docs/auto-pull.md +++ b/docs/auto-pull.md @@ -8,7 +8,7 @@ ```kotlin page.onRefresh { scope { - val data = Get("list") { + val data = Get(Api.PATH) { param("page", index) }.await().data addData(data.list) { diff --git a/docs/auto-refresh.md b/docs/auto-refresh.md index 5d6afc072..2d290ca06 100644 --- a/docs/auto-refresh.md +++ b/docs/auto-refresh.md @@ -47,7 +47,7 @@ rv_push.linear().setup { page.onRefresh { scope { // 请求到数据设置到RecyclerView - rv_push.models = Get("list").await().data.list + rv_push.models = Get(Api.PATH).await().data.list } }.autoRefresh() ``` diff --git a/docs/auto-state.md b/docs/auto-state.md index 20c07f870..aaa7d0f39 100644 --- a/docs/auto-state.md +++ b/docs/auto-state.md @@ -56,7 +56,7 @@ StateConfig.apply { ```kotlin state.onRefresh { scope { - tvFragment.text = Get("api").await() + tvFragment.text = Get(Api.PATH).await() } }.showLoading() ``` diff --git a/docs/cache.md b/docs/cache.md index 1bfffe954..ef2ae2fad 100644 --- a/docs/cache.md +++ b/docs/cache.md @@ -38,7 +38,7 @@ OkHttp默认的Http缓存协议控制, 要求以下条件 ```kotlin scopeNetLife { - Post("api") { + Post(Api.PATH) { setCacheControl(CacheControl.FORCE_CACHE) // 强制使用缓存 // setCacheControl(CacheControl.FORCE_NETWORK) // 强制使用网络 // setCacheControl(CacheControl.Builder().noStore().noCache().build()) // 完全禁止读取/写入缓存 @@ -55,7 +55,7 @@ scopeNetLife { ```kotlin scopeNetLife { binding.tvFragment.text = - Post("api") { + Post(Api.PATH) { setCacheMode(CacheMode.REQUEST_THEN_READ) // 请求网络失败会读取缓存, 请断网测试 }.await() } @@ -77,7 +77,7 @@ scopeNetLife { ```kotlin scopeNetLife { binding.tvFragment.text = - Post("api") { + Post(Api.PATH) { setCacheMode(CacheMode.REQUEST_THEN_READ) // 请求网络失败会读取缓存, 请断网测试 setCacheKey("请求热门信息" + params) // 具体值都行 }.await() @@ -92,7 +92,7 @@ scopeNetLife { ```kotlin scopeNetLife { binding.tvFragment.text = - Post("api") { + Post(Api.PATH) { setCacheMode(CacheMode.REQUEST_THEN_READ) // 请求网络失败会读取缓存, 请断网测试 setCacheValidTime(1, TimeUnit.DAYS) // 缓存仅一天内有效 }.await() @@ -106,13 +106,13 @@ scopeNetLife { ```kotlin scopeNetLife { // 然后执行这里(网络请求) - binding.tvFragment.text = Get("api") { + binding.tvFragment.text = Get(Api.PATH) { setCacheMode(CacheMode.WRITE) }.await() Log.d("日志", "网络请求") }.preview(true) { // 先执行这里(仅读缓存), 任何异常都视为读取缓存失败 - binding.tvFragment.text = Get("api") { + binding.tvFragment.text = Get(Api.PATH) { setCacheMode(CacheMode.READ) }.await() Log.d("日志", "读取缓存") diff --git a/docs/cancel.md b/docs/cancel.md index 4820ef94d..6d0d4be3e 100644 --- a/docs/cancel.md +++ b/docs/cancel.md @@ -3,7 +3,7 @@ ```kotlin downloadScope = scopeNetLife { // 下载文件 - val file = Get("download").await() + val file = Get(Api.DOWNLOAD).await() } downloadScope.cancel() // 取消下载 @@ -14,7 +14,7 @@ downloadScope.cancel() // 取消下载 ```kotlin scopeNetLife { - tvFragment.text = Get("api"){ + tvFragment.text = Get(Api.DOWNLOAD){ setId("请求用户信息") }.await() } diff --git a/docs/config.md b/docs/config.md index 983aaa090..2d433e729 100644 --- a/docs/config.md +++ b/docs/config.md @@ -72,7 +72,7 @@ NetConfig.initialize(Api.HOST, this) { 指定Path(例如`/api/index`)会自动和`NetConfig.host`拼接组成Url, 但指定以`http/https`开头的全路径则直接作为请求Url ```kotlin scopeNetLife { - val data = Get("https://github.com/path").await() + val data = Get("https://github.com/liangjingkanji/net").await() } ``` @@ -81,7 +81,7 @@ NetConfig.initialize(Api.HOST, this) { ```kotlin scopeNetLife { - val data = Get("/api/index", "User").await() // User即为tag + val data = Get(Api.PATH, "User").await() // User即为tag } // 拦截器修改请求URL不做介绍 ``` diff --git a/docs/converter-customize.md b/docs/converter-customize.md index ceec1c059..19b7a7f2f 100644 --- a/docs/converter-customize.md +++ b/docs/converter-customize.md @@ -7,7 +7,7 @@ Net自定义转换器可支持任何数据类型, 甚至`Bitmap` ```kotlin scopeNetLife { - val userList = Get>("list") { + val userList = Get>(Api.PATH) { converter = GsonConverter() }.await() } @@ -26,7 +26,7 @@ Net由于低耦合原则不自带任何序列化框架 === "单例" ```kotlin hl_lines="3" scopeNetLife { - tvFragment.text = Get("api"){ + tvFragment.text = Get(Api.PATH){ converter = SerializationConverter() }.await() } diff --git a/docs/converter-struct.md b/docs/converter-struct.md index 775a0a123..05b932e68 100644 --- a/docs/converter-struct.md +++ b/docs/converter-struct.md @@ -32,7 +32,7 @@ === "网络请求" ```kotlin scopeNetLife { - val data = Get("api").await().data + val data = Get(Api.USER).await().data } ``` @@ -81,7 +81,7 @@ class GsonConvert : JSONConvert(code = "code", message = "msg", success = "200") ```kotlin scopeNetLife { - val data = Get("api").await() + val data = Get(Api.USER).await() } ``` diff --git a/docs/converter.md b/docs/converter.md index aeda64d48..2ee2ce923 100644 --- a/docs/converter.md +++ b/docs/converter.md @@ -1,6 +1,6 @@ Net支持请求返回的数据类型取决于你的转换器实现 -# Get<任何对象>("path").await() +# Get<任何对象>(Api.PATH).await() 默认转换器支持返回以下数据类型 @@ -16,7 +16,7 @@ Net支持请求返回的数据类型取决于你的转换器实现 ```kotlin scopeNetLife { - Get("api").await().headers("响应头名称") // 返回响应头 + Get(Api.PATH).await().headers("响应头名称") // 返回响应头 } ``` diff --git a/docs/coroutine-request.md b/docs/coroutine-request.md index 43118885b..cceb6df65 100644 --- a/docs/coroutine-request.md +++ b/docs/coroutine-request.md @@ -7,7 +7,7 @@ val job = scopeNetLife { repeat(10000) { // 这里将返回的数据显示在TextView上 launch { - tvFragment.text = Get("https://github.com/liangjingkanji/Net/").await() + tvFragment.text = Get(Api.PATH).await() } } } diff --git a/docs/debounce.md b/docs/debounce.md index 753c74fb1..90d36b77b 100644 --- a/docs/debounce.md +++ b/docs/debounce.md @@ -31,4 +31,6 @@ binding.etInput.debounce().distinctUntilChanged().launchIn(this) { 指定参数设置节流阀超时时间 ```kotlin fun EditText.debounce(timeoutMillis: Long = 800) -``` \ No newline at end of file +``` +
+1. [示例-自动搜索分页列表](https://github.com/liangjingkanji/Net/blob/a78d46118666a3509d3fcc79c1d28ad81e2d5a57/sample/src/main/java/com/drake/net/sample/ui/fragment/EditDebounceFragment.kt) \ No newline at end of file diff --git a/docs/download-file.md b/docs/download-file.md index 6d88c710b..503395b6e 100644 --- a/docs/download-file.md +++ b/docs/download-file.md @@ -2,7 +2,7 @@ ```kotlin scopeNetLife { - val file = Get("download").await() + val file = Get(Api.DOWNLOAD).await() } ``` @@ -13,7 +13,7 @@ scopeNetLife { ```kotlin scopeNetLife { val file = - Get("https://download.sublimetext.com/Sublime%20Text%20Build%203211.dmg") { + Get("https://github.com/liangjingkanji/Net/releases/latest/download/net-sample.apk") { setDownloadFileName("net.apk") setDownloadDir(requireContext().filesDir) setDownloadMd5Verify() diff --git a/docs/error-single.md b/docs/error-single.md index 9c0dd088a..f6621a74e 100644 --- a/docs/error-single.md +++ b/docs/error-single.md @@ -7,8 +7,8 @@ 例如 ```kotlin scopeNetLife { - Get("api").await() // 失败 - Get("api2").await() // 上面失败, 此处也不会执行 + Get("path").await() // 失败 + Get("path2").await() // 上面失败, 此处也不会执行 } ``` @@ -16,19 +16,19 @@ scopeNetLife { ```kotlin scopeNetLife { try { - Get("api").await() // 失败 + Get("path").await() // 失败 } catch(e:Exception) { } - Get("api2").await() // 上面失败, 此处继续执行 + Get("path2").await() // 上面失败, 此处继续执行 } ``` 当然如果创建不同的作用域分别请求那是互不影响的 ```kotlin scopeNetLife { - Get("api").await() // 失败 + Get("path").await() // 失败 } scopeNetLife { - Get("api2").await() // 上面失败, 此处完全不受影响 + Get("path2").await() // 上面失败, 此处完全不受影响 } ``` @@ -38,7 +38,7 @@ scopeNetLife { ```kotlin scope { - val data = Get("http://www.thisiserror.com/").await() + val data = Get("http://www.error.com/").await() }.catch { // 协程内发生错误回调, it为异常对象 }.finally { diff --git a/docs/fastest.md b/docs/fastest.md index 4705ddc6e..c10bfe5cf 100644 --- a/docs/fastest.md +++ b/docs/fastest.md @@ -11,10 +11,10 @@ scopeNetLife { // 同时发起四个网络请求 - val deferred = Get("api0") // 错误接口 - val deferred1 = Get("api1") // 错误接口 - val deferred2 = Get("api") - val deferred3 = Post("api") + val deferred = Get("path") // 错误接口 + val deferred1 = Get("path1") // 错误接口 + val deferred2 = Get("path2") + val deferred3 = Post("path3") // 只返回最快的请求结果 tvFragment.text = fastest(deferred, deferred1, deferred2, deferred3) @@ -29,10 +29,10 @@ scopeNetLife { ```kotlin scopeNetLife { // 同时发起四个网络请求 - val deferred2 = Get("api") { setGroup("初始化") } - val deferred3 = Post("api") { setGroup("初始化") } - val deferred = Get("api0") { setGroup("初始化") } // 错误接口 - val deferred1 = Get("api1") { setGroup("初始化") } // 错误接口 + val deferred2 = Get("path") { setGroup("初始化") } + val deferred3 = Post("path1") { setGroup("初始化") } + val deferred = Get("path2") { setGroup("初始化") } // 错误接口 + val deferred1 = Get("path3") { setGroup("初始化") } // 错误接口 // 只返回最快的请求结果 tvFragment.text = fastest(listOf(deferred, deferred1, deferred2, deferred3), "初始化") @@ -46,12 +46,12 @@ scopeNetLife { ```kotlin scopeNetLife { - val fastest = Post("api").transform { + val fastest = Post("path").transform { Log.d("日志", "Post") // 如果该接口最快则会回调这里 it // 这里可以返回其他数据结果 } - val fastest2 = Get("api").transform { + val fastest2 = Get("path").transform { Log.d("日志", "Get") // 如果该接口最快则会回调这里 it } @@ -65,17 +65,17 @@ scopeNetLife { ## 捕获错误 ```kotlin scopeNetLife { - val task = Get("api2") - val task1 = Get("api2") - val task2 = Get("api2") + val task = Get("path") + val task1 = Get("path1") + val task2 = Get("path2") val data = try { fastest(listOf(task, task1, task2)) // 当task/task1/task2全部错误后才并发执行backupTask/backupTask1 } catch (e: Exception) { - val backupTask = Get("api2") - val backupTask1 = Get("api") - fastest(listOf(backupTask, backupTask1)) + val task3 = Get("path3") + val task4 = Get("path4") + fastest(listOf(task3, task4)) } } ``` \ No newline at end of file diff --git a/docs/https.md b/docs/https.md index f3df3fb80..a263ecabc 100644 --- a/docs/https.md +++ b/docs/https.md @@ -6,7 +6,7 @@ Https如果使用的CA证书, 不需要任何配置可以直接访问 ```kotlin scopeNetLife { - tvFragment.text = Get("https://github.com/liangjingkanji/Net/").await() + tvFragment.text = Get(Api.PATH).await() } ``` @@ -25,7 +25,7 @@ scopeNetLife { ```kotlin scopeNetLife { - Get("https://github.com/liangjingkanji/Net/"){ + Get(Api.PATH){ setClient { trustSSLCertificate() } @@ -50,7 +50,7 @@ scopeNetLife { ```kotlin scopeNetLife { - Get("https://github.com/liangjingkanji/Net/") { + Get(Api.PATH) { setClient { val privateCertificate = resources.assets.open("https.certificate") // 这里的证书是放到应用的资产目录下 setSSLCertificate(privateCertificate) diff --git a/docs/index.md b/docs/index.md index 599bea4ef..92cf07741 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,49 +22,46 @@ Net是基于[OkHttp](https://github.com/square/okhttp)/协程的非侵入式框 === "简单请求" ```kotlin - scopeNetLife { 创建作用域 - // 这个大括号内就属于作用域内部 - val data = Get("https://github.com/liangjingkanji/Net/").await() // 发起GET请求并返回`String`类型数据 + scopeNetLife { + // 大括号内属于作用域 + val data = Get(Api.USER).await() // 发起GET请求并返回`String` } ``` === "同步请求" ```kotlin scopeNetLife { - val userInfo = Get("https://github.com/liangjingkanji/BRV/").await() // 立即请求 - val config = Get("https://github.com/liangjingkanji/Net/"){ - param("userId", userInfo.id) // 使用上个请求的数据作为参数 - }.await() // 请求B 将等待A请求完毕后发起GET请求并返回数据 + // B将等待A请求返回结果后发起请求 + val userInfo = Get(Api.USER).await() // A + + val config = Get(Api.CONFIG){ // B + param("userId", userInfo.id) // 将上个请求结果作为参数 + }.await() } ``` === "并发请求" ```kotlin scopeNetLife { - // 以下两个网络请求属于同时进行中 - val getUserInfoAsync = Get("https://github.com/liangjingkanji/Net/") // 立即请求 - val getConfigAsync = Get("https://github.com/liangjingkanji/BRV/") // 立即请求 + // 两个请求同时发起 + val getUserInfoAsync = Get(Api.USER) + val getConfigAsync = Get(Api.CONFIG) val userInfo = getUserInfoAsync.await() // 等待数据返回 val config = getConfigAsync.await() } ``` -多个网络请求在同一个作用域内可以统一管理 - -如果多个网络请求之间毫无关联, 可以创建多个作用域来请求 +1. 多个网络请求在同一个作用域内可以统一管理 +2. 如果多个网络请求之间毫无关联, 可以创建多个作用域来请求 !!! failure "强制初始化" 多进程或Xposed项目要求先[初始化](config.md#_1) -并发请求错误示例 +自动识别`Url`或者`Path`请求 ```kotlin hl_lines="3" scopeNetLife { - // 请求A - val userInfo = Get("https://github.com/liangjingkanji/Net/").await() - // 由于上面使用`await()`函数, 所以必须等待A请求返回结果后才会执行B - val getConfigAsync = Post("https://github.com/liangjingkanji/Net/") - - val config = getConfigAsync.await() // 等待任务B返回数据 + val userInfo = Get("/net").await() + val config = Get("https://github.com/liangjingkanji/net").await() } ``` diff --git a/docs/kotlin-serialization.md b/docs/kotlin-serialization.md index 0a2bc6678..90e8973ff 100644 --- a/docs/kotlin-serialization.md +++ b/docs/kotlin-serialization.md @@ -53,7 +53,7 @@ implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0" ``` === "单例配置" ```kotlin - val userList = Get>("list") { + val userList = Get>(Api.PATH) { converter = SerializationConvert() // 单例转换器, 此时会忽略全局转换器 }.await() ``` @@ -62,7 +62,7 @@ implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0" ```kotlin scopeNetLife { - val userList = Get>("list") { + val userList = Get>(Api.PATH) { converter = SerializationConvert() }.await() diff --git a/docs/log-notice.md b/docs/log-notice.md index 1212ef99f..8c05631a4 100644 --- a/docs/log-notice.md +++ b/docs/log-notice.md @@ -14,7 +14,7 @@ implementation "com.github.chuckerteam.chucker:library:3.5.2" 添加拦截器 ```kotlin -NetConfig.initialize("https://github.com/liangjingkanji/", this) { +NetConfig.initialize(Api.HOST, this) { // ... if (BuildConfig.DEBUG) { addInterceptor( diff --git a/docs/progress.md b/docs/progress.md index ec4ecf5ae..6c040d8b3 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -5,7 +5,7 @@ Net支持上传/下载的进度监听, 且具备完善的进度信息 ```kotlin scopeNetLife { - Post("https://download.sublimetext.com/Sublime%20Text%20Build%203211.dmg") { + Post(Api.UPLOAD) { param("file", assetsFile()) addUploadListener(object : ProgressListener() { override fun onProgress(p: Progress) { @@ -29,7 +29,7 @@ scopeNetLife { ```kotlin scopeNetLife { val file = - Get("https://download.sublimetext.com/Sublime%20Text%20Build%203211.dmg") { + Get("https://github.com/liangjingkanji/Net/releases/latest/download/net-sample.apk") { setDownloadFileName("net.apk") setDownloadDir(requireContext().filesDir) diff --git a/docs/repeat-request.md b/docs/repeat-request.md index a14219524..ba3978dab 100644 --- a/docs/repeat-request.md +++ b/docs/repeat-request.md @@ -9,7 +9,7 @@ btnFilter.setOnClickListener { scope?.cancel() scope = scopeNetLife { - val result = Post("api").await() + val result = Post(Api.PATH).await() } } ``` diff --git a/docs/request.md b/docs/request.md index e312d494b..00f26fa67 100644 --- a/docs/request.md +++ b/docs/request.md @@ -10,7 +10,7 @@ ```kotlin scopeNetLife { val userInfo = Post(Api.LOGIN) { - param("username", "drake") + param("username", "用户名") param("password", "6f2961eb44b12123393fff7e449e50b9de2499c6") }.await() } @@ -34,7 +34,7 @@ scopeNetLife { val measurements = listOf(100, 100, 100) scopeNetLife { - tvFragment.text = Post("api") { + tvFragment.text = Post(Api.PATH) { // 只支持基础类型的值, 如果值为对象或者包含对象的集合/数组会导致其值为null json("name" to name, "age" to age, "measurements" to measurements) }.await() @@ -48,7 +48,7 @@ scopeNetLife { val measurements = listOf(100, 100, 100) // 只支持基础类型的值, 如果值为对象或者包含对象的集合/数组会导致其值为null scopeNetLife { - tvFragment.text = Post("api") { + tvFragment.text = Post(Api.PATH) { json(JSONObject().run { put("name", name) put("age", age) @@ -65,7 +65,7 @@ scopeNetLife { val measurements = listOf(100, 100, 100) scopeNetLife { - tvFragment.text = Post("api") { + tvFragment.text = Post(Api.PATH) { body = CustomizerJSONBody(name, age, measurements) }.await() } @@ -99,7 +99,7 @@ scopeNetLife { ```kotlin scopeNetLife { - tvFragment.text = Post("api") { + tvFragment.text = Post(Api.PATH) { gson("name" to name, "model" to Model()) // 参数支持Gson可解析的对象 // fastJson("name" to name, "model" to Model()) // 使用FastJson }.await() diff --git a/docs/scope.md b/docs/scope.md index 6dc1b3a39..9436d8335 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -47,10 +47,10 @@ ```kotlin hl_lines="5" scopeNetLife { - val task = Post("api0").await() + val task = Post("path").await() scopeNetLife { - val task = Post("api0").await() // 此时发生请求错误 + val task = Post("path/error").await() // 此时发生请求错误 }.catch { // A } @@ -67,10 +67,10 @@ scopeNetLife { ```kotlin hl_lines="7 10" scopeNet { - val await = Post("api").await() + val await = Post("path").await() launch { - val task = Post("api0").await() // 此时发生请求错误 + val task = Post("path/error").await() // 此时发生请求错误 }.invokeOnCompletion { // A } diff --git a/docs/tag.md b/docs/tag.md index 237960bf2..8cef2ec97 100644 --- a/docs/tag.md +++ b/docs/tag.md @@ -11,7 +11,7 @@ Net支持两种方式携带数据, 贯穿整个请求流程(请求/拦截器/转 ```kotlin hl_lines="2" scopeNetLife { - tvFragment.text = Get("api", "标签A"){ // 使用Any::class.java作为键名 + tvFragment.text = Get(Api.PATH, "标签A"){ // 使用Any::class.java作为键名 // tag("标签A") 等效上一行的参数 "标签A" setExtra("tagName", "标签B") // 写入额外数据 }.await() @@ -64,7 +64,7 @@ class MyConvert : NetConvert { ```kotlin scopeNetLife { - Get("api"){ + Get(Api.PATH){ setExtra("person", Person()) // 使用Request.extra("person")读取 tag(User()) // 等同于tag(Any::class.java, User()), 使用Request.tag()读取 tag(User::class.java, User()) // 使用Request.tag(User::class.java)读取 diff --git a/docs/thread.md b/docs/thread.md index eaf79fcb1..80b510f8b 100644 --- a/docs/thread.md +++ b/docs/thread.md @@ -7,7 +7,7 @@ ```kotlin scopeNetLife(dispatcher = Dispatchers.IO) { - binding.tvFragment.text = Get("api").await() + binding.tvFragment.text = Get(Api.PATH).await() } ``` diff --git a/docs/timing.md b/docs/timing.md index 349ecae96..067d27565 100644 --- a/docs/timing.md +++ b/docs/timing.md @@ -9,12 +9,12 @@ scopeDialog { // 当接口请求在100毫秒内没有完成会抛出异常TimeoutCancellationException withTimeout(100) { - Get(Api.BANNER).await() + Get(Api.PATH).await() } }.catch { - Log.e("日志", "catch", it) // catch无法接收到CancellationException异常 + Log.e("日志", "请求错误", it) // catch无法接收到CancellationException异常 }.finally { - Log.e("日志", "finally", it) // TimeoutCancellationException属于CancellationException子类故只会被finally接收到 + Log.e("日志", "请求完成", it) // TimeoutCancellationException属于CancellationException子类故只会被finally接收到 if (it is TimeoutCancellationException) { toast("由于未在指定时间完成请求则取消请求") } @@ -30,11 +30,10 @@ scopeNetLife { // 每两秒请求一次, 总共执行10次 repeat(20) { delay(1000) - val data = - Get("http://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json").await() - binding.tvContent.text = - JSONObject(data).getJSONObject("result").getString("datetime_2") - // 通过return@repeat可以终止循环 + val data = Get(Api.PATH).await() + if(it = 10) { + return@repeat + } } } ``` @@ -45,11 +44,10 @@ scopeNetLife { scopeNetLife { while (true) { delay(1.toDuration(DurationUnit.SECONDS)) - val data = - Get("http://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json").await() - binding.tvContent.text = - JSONObject(data).getJSONObject("result").getString("datetime_2") - // 通过break可以终止循环 + val data = Get(Api.PATH).await() + if(data.type = 3) { + break + } } } ``` \ No newline at end of file diff --git a/docs/track.md b/docs/track.md index 15ff2d3e5..52e512680 100644 --- a/docs/track.md +++ b/docs/track.md @@ -4,7 +4,7 @@ Net中网络请求异常会LogCat输出, 除非开发者修改全局错误处理 演示访问一个不存在的请求路径 ```kotlin scopeNetLife { - tvFragment.text = Get("https://githuberror.com/liangjingkanji/Net/").await() + tvFragment.text = Get("https://error.com/net/").await() } ``` diff --git a/sample/src/main/java/com/drake/net/sample/base/App.kt b/sample/src/main/java/com/drake/net/sample/base/App.kt index 93ffb08fc..e03109de1 100644 --- a/sample/src/main/java/com/drake/net/sample/base/App.kt +++ b/sample/src/main/java/com/drake/net/sample/base/App.kt @@ -76,11 +76,11 @@ class App : Application() { MockDispatcher.initialize() - initializeThirdPart() + initializeView() } /** 初始化第三方依赖库库 */ - private fun initializeThirdPart() { + private fun initializeView() { // 全局缺省页配置 [https://github.com/liangjingkanji/StateLayout] StateConfig.apply { diff --git a/sample/src/main/java/com/drake/net/sample/constants/Api.kt b/sample/src/main/java/com/drake/net/sample/constants/Api.kt index a9f92a617..c8446d84d 100644 --- a/sample/src/main/java/com/drake/net/sample/constants/Api.kt +++ b/sample/src/main/java/com/drake/net/sample/constants/Api.kt @@ -7,7 +7,7 @@ package com.drake.net.sample.constants object Api { const val HOST = "http://127.0.0.1:8091" - const val TEST = "/test" + const val TEXT = "/text" const val DELAY = "/delay" const val UPLOAD = "/upload" const val GAME = "/game" diff --git a/sample/src/main/java/com/drake/net/sample/mock/MockDispatcher.kt b/sample/src/main/java/com/drake/net/sample/mock/MockDispatcher.kt index 633207606..a5972d481 100644 --- a/sample/src/main/java/com/drake/net/sample/mock/MockDispatcher.kt +++ b/sample/src/main/java/com/drake/net/sample/mock/MockDispatcher.kt @@ -36,7 +36,7 @@ class MockDispatcher : Dispatcher() { override fun dispatch(request: RecordedRequest): MockResponse { return when (request.requestUrl?.encodedPath ?: "") { - Api.TEST -> getString("Request Success : ${request.method}") + Api.TEXT -> getString("Request Success : ${request.method}") Api.DELAY -> getString("Request Success : ${request.method}").setBodyDelay(2, TimeUnit.SECONDS) Api.UPLOAD -> uploadFile(request) Api.GAME -> getRawResponse(R.raw.game) diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/CallbackRequestFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/CallbackRequestFragment.kt index 638230989..3f5622970 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/CallbackRequestFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/CallbackRequestFragment.kt @@ -19,7 +19,7 @@ class CallbackRequestFragment : override fun initView() { // Net同样支持OkHttp原始的队列任务 - Net.post(Api.TEST).enqueue(object : Callback { + Net.post(Api.TEXT).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { } diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt index 7b28a812a..d0342aa36 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt @@ -19,7 +19,7 @@ class FastestFragment : EngineFragment(R.layout.fragment */ // 同时发起四个网络请求 - val deferred2 = Get(Api.TEST) { setGroup("最快") } + val deferred2 = Get(Api.TEXT) { setGroup("最快") } val deferred3 = Post("navi/json") { setGroup("最快") } val deferred = Get("api0") { setGroup("最快") } // 错误接口 val deferred1 = Get("api1") { setGroup("最快") } // 错误接口 diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt index bf3eed765..dab2d2eb1 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt @@ -13,7 +13,7 @@ class InterceptorFragment : override fun initView() { scopeNetLife { - binding.tvFragment.text = Get(Api.TEST) { + binding.tvFragment.text = Get(Api.TEXT) { // 拦截器只支持全局, 无法单例, 请查看[com.drake.net.sample.interceptor.NetInterceptor] }.await() } diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/LimitedTimeFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/LimitedTimeFragment.kt index 5407b2c34..a2776d33b 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/LimitedTimeFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/LimitedTimeFragment.kt @@ -24,7 +24,7 @@ class LimitedTimeFragment : EngineFragment(R.layout. scopeDialog { // 当接口请求在100毫秒内没有完成会抛出异常TimeoutCancellationException withTimeout(100) { - Get(Api.TEST).await() + Get(Api.TEXT).await() } }.catch { Log.e("日志", "catch", it) // catch无法接收到CancellationException异常 diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt index 4957b57f5..dcb7b09b5 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt @@ -17,9 +17,9 @@ class ParallelNetworkFragment : scopeNetLife { // 同时发起三个请求 - val deferred = Get(Api.TEST) - val deferred1 = Post(Api.TEST) - val deferred2 = Trace(Api.TEST) + val deferred = Get(Api.TEXT) + val deferred1 = Post(Api.TEXT) + val deferred2 = Trace(Api.TEXT) // 同时接收三个请求数据 deferred.await() diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt index afda0ef3e..d1d78d117 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt @@ -19,13 +19,13 @@ class PreviewCacheFragment : EngineFragment(R.layout.f scopeNetLife { // 然后执行这里(网络请求) - binding.tvFragment.text = Get(Api.TEST) { + binding.tvFragment.text = Get(Api.TEXT) { setCacheMode(CacheMode.WRITE) }.await() Log.d("日志", "网络请求") }.preview(true) { // 先执行这里(仅读缓存), 任何异常都视为读取缓存失败 - binding.tvFragment.text = Get(Api.TEST) { + binding.tvFragment.text = Get(Api.TEXT) { setCacheMode(CacheMode.READ) }.await() Log.d("日志", "读取缓存") diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/ReadCacheFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/ReadCacheFragment.kt index f548ae544..f349124c0 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/ReadCacheFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/ReadCacheFragment.kt @@ -19,7 +19,7 @@ class ReadCacheFragment : EngineFragment(R.layout.frag override fun initView() { scopeNetLife { binding.tvFragment.text = - Post(Api.TEST) { + Post(Api.TEXT) { setCacheMode(CacheMode.REQUEST_THEN_READ) // 请求网络失败会读取缓存, 请断网测试 // setCacheKey("自定义缓存KEY") }.await() diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt index f2c93ec23..9d3993460 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt @@ -25,49 +25,49 @@ class RequestMethodFragment : private fun GET() { scopeNetLife { - binding.tvFragment.text = Get(Api.TEST).await() + binding.tvFragment.text = Get(Api.TEXT).await() } } private fun POST() { scopeNetLife { - binding.tvFragment.text = Post(Api.TEST).await() + binding.tvFragment.text = Post(Api.TEXT).await() } } private fun HEAD() { scopeNetLife { - binding.tvFragment.text = Head(Api.TEST).await() + binding.tvFragment.text = Head(Api.TEXT).await() } } private fun PUT() { scopeNetLife { - binding.tvFragment.text = Put(Api.TEST).await() + binding.tvFragment.text = Put(Api.TEXT).await() } } private fun PATCH() { scopeNetLife { - binding.tvFragment.text = Patch(Api.TEST).await() + binding.tvFragment.text = Patch(Api.TEXT).await() } } private fun DELETE() { scopeNetLife { - binding.tvFragment.text = Delete(Api.TEST).await() + binding.tvFragment.text = Delete(Api.TEXT).await() } } private fun TRACE() { scopeNetLife { - binding.tvFragment.text = Trace(Api.TEST).await() + binding.tvFragment.text = Trace(Api.TEXT).await() } } private fun OPTIONS() { scopeNetLife { - binding.tvFragment.text = Options(Api.TEST).await() + binding.tvFragment.text = Options(Api.TEXT).await() } } @@ -92,7 +92,7 @@ class RequestMethodFragment : // }.await() // 创建JSON - binding.tvFragment.text = Post(Api.TEST) { + binding.tvFragment.text = Post(Api.TEXT) { json("name" to name, "age" to age, "measurements" to measurements) // 同时支持Map集合 }.await() } diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/StateLayoutFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/StateLayoutFragment.kt index 73b30de3d..2e2827062 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/StateLayoutFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/StateLayoutFragment.kt @@ -17,7 +17,7 @@ class StateLayoutFragment : override fun initView() { binding.state.onRefresh { scope { - binding.tvFragment.text = Get(Api.TEST).await() + binding.tvFragment.text = Get(Api.TEXT).await() } }.showLoading() } diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt index c37c85ac0..02d831489 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt @@ -13,7 +13,7 @@ class SyncRequestFragment : override fun initView() { thread { // 网络请求不允许在主线程 val result = try { - Net.post(Api.TEST).execute() + Net.post(Api.TEXT).execute() } catch (e: Exception) { // 同步请求失败会导致崩溃要求捕获异常 "请求错误 = ${e.message}" } diff --git a/sample/src/main/java/com/drake/net/sample/ui/fragment/UniqueRequestFragment.kt b/sample/src/main/java/com/drake/net/sample/ui/fragment/UniqueRequestFragment.kt index 876040bb5..3fadbc226 100644 --- a/sample/src/main/java/com/drake/net/sample/ui/fragment/UniqueRequestFragment.kt +++ b/sample/src/main/java/com/drake/net/sample/ui/fragment/UniqueRequestFragment.kt @@ -20,7 +20,7 @@ class UniqueRequestFragment : scope?.cancel() // 如果存在则取消 scope = scopeNetLife { - val result = Post(Api.TEST).await() + val result = Post(Api.TEXT).await() Log.d("日志", "请求到结果") // 你一直重复点击"发起请求"按钮会发现永远无法拿到请求结果, 因为每次发起新的请求会取消未完成的 binding.tvResult.text = result } diff --git a/sample/src/main/java/com/drake/net/sample/vm/UserViewModel.kt b/sample/src/main/java/com/drake/net/sample/vm/UserViewModel.kt index 2372f561f..2880a8600 100644 --- a/sample/src/main/java/com/drake/net/sample/vm/UserViewModel.kt +++ b/sample/src/main/java/com/drake/net/sample/vm/UserViewModel.kt @@ -28,14 +28,14 @@ class UserViewModel : ViewModel() { * 开始非阻塞异步任务 * 返回Deferred, 调用await()才会返回结果 */ - fun fetchList(scope: CoroutineScope) = scope.Get(Api.TEST) + fun fetchList(scope: CoroutineScope) = scope.Get(Api.TEXT) /** * 开始阻塞异步任务 * 直接返回结果 */ suspend fun fetchPrecessData() = coroutineScope { - val response = Get(Api.TEST).await() + val response = Get(Api.TEXT).await() response + "处理数据" } } \ No newline at end of file