Просмотр исходного кода

更新Demo, 动态请求参数拦截器示例

drake 4 лет назад
Родитель
Сommit
fe2dda8138

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

@@ -23,8 +23,9 @@ import com.drake.net.logEnabled
 import com.drake.net.sample.BR
 import com.drake.net.sample.BuildConfig
 import com.drake.net.sample.R
-import com.drake.net.sample.callback.MoshiConvert
-import com.drake.net.sample.callback.NetTagInterceptor
+import com.drake.net.sample.convert.MoshiConvert
+import com.drake.net.sample.interceptor.DynamicParameterInterceptor
+import com.drake.net.sample.interceptor.NetTagInterceptor
 import com.drake.statelayout.StateConfig
 import com.scwang.smart.refresh.footer.ClassicsFooter
 import com.scwang.smart.refresh.header.MaterialHeader
@@ -46,6 +47,7 @@ class App : Application() {
             converter(MoshiConvert()) // 自动解析JSON映射到实体类中, 转换器分为全局和单例, 覆盖生效(拦截器允许多个)
             cacheEnabled()
             addInterceptor(NetTagInterceptor())
+            addInterceptor(DynamicParameterInterceptor())
             setLogRecord(BuildConfig.DEBUG) // 日志记录器
             logEnabled = BuildConfig.DEBUG // LogCat异常日志
         }

+ 1 - 1
sample/src/main/java/com/drake/net/sample/callback/FastJsonConvert.kt → sample/src/main/java/com/drake/net/sample/convert/FastJsonConvert.kt

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.drake.net.sample.callback
+package com.drake.net.sample.convert
 
 import com.alibaba.fastjson.JSON
 import com.drake.net.convert.DefaultConvert

+ 1 - 1
sample/src/main/java/com/drake/net/sample/callback/GsonConvert.kt → sample/src/main/java/com/drake/net/sample/convert/GsonConvert.kt

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.drake.net.sample.callback
+package com.drake.net.sample.convert
 
 import com.drake.net.convert.DefaultConvert
 import com.google.gson.GsonBuilder

+ 1 - 1
sample/src/main/java/com/drake/net/sample/callback/MoshiConvert.kt → sample/src/main/java/com/drake/net/sample/convert/MoshiConvert.kt

@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.drake.net.sample.callback
+package com.drake.net.sample.convert
 
 import com.drake.net.convert.DefaultConvert
 import com.squareup.moshi.Moshi

+ 38 - 0
sample/src/main/java/com/drake/net/sample/interceptor/DynamicParameterInterceptor.kt

@@ -0,0 +1,38 @@
+package com.drake.net.sample.interceptor
+
+import com.yanzhenjie.kalle.RequestMethod
+import com.yanzhenjie.kalle.Response
+import com.yanzhenjie.kalle.connect.Interceptor
+import com.yanzhenjie.kalle.connect.http.Chain
+import com.yanzhenjie.kalle.simple.SimpleBodyRequest
+import com.yanzhenjie.kalle.simple.SimpleUrlRequest
+
+class DynamicParameterInterceptor : Interceptor {
+    override fun intercept(chain: Chain): Response {
+        var request = chain.request()
+
+        // 除非是Download*函数否则都仅有两种Request: SimpleBodyRequest/SimpleUrlRequest
+        request = when (request.method()) {
+            RequestMethod.POST -> {
+                val copyParams =
+                    request.copyParams().builder().add("token", "dsgfahfty1231").build() // 添加一个参数
+                SimpleBodyRequest.newBuilder(request.url(), request.method())
+                    .setParams(copyParams)
+                    .setHeaders(request.headers())
+                    .tag(request.tag())
+                    .build()
+            }
+            RequestMethod.GET -> {
+                val copyParams =
+                    request.copyParams().builder().add("ip", "127.0.0.1").build()
+                SimpleUrlRequest.newBuilder(request.url(), request.method())
+                    .setParams(copyParams)
+                    .setHeaders(request.headers())
+                    .tag(request.tag())
+                    .build()
+            }
+            else -> request
+        }
+        return chain.proceed(request)
+    }
+}

+ 10 - 7
sample/src/main/java/com/drake/net/sample/callback/NetTagInterceptor.kt → sample/src/main/java/com/drake/net/sample/interceptor/NetTagInterceptor.kt

@@ -16,7 +16,7 @@
 
 @file:Suppress("ControlFlowWithEmptyBody")
 
-package com.drake.net.sample.callback
+package com.drake.net.sample.interceptor
 
 import com.drake.net.tag.REQUEST
 import com.drake.net.tag.RESPONSE
@@ -29,15 +29,18 @@ class NetTagInterceptor : Interceptor {
     override fun intercept(chain: Chain): Response {
         val request = chain.request()
 
-        val tag = request.tag() as? TAG ?: return chain.proceed(request)
+        val tag = request.tag() as? TAG
 
-        if (tag.contains(REQUEST)) {
-            // 可以打印响应体或者其他逻辑
-        }
+        tag?.let {
+            if (it.contains(REQUEST)) {
+                // 可以打印响应体或者其他逻辑
+            }
 
-        if (tag.contains(RESPONSE)) {
-            // 可以打印请求体或者其他逻辑
+            if (it.contains(RESPONSE)) {
+                // 可以打印请求体或者其他逻辑
+            }
         }
+
         return chain.proceed(request)
     }
 }

+ 1 - 1
sample/src/main/java/com/drake/net/sample/ui/fragment/CustomConvertFragment.kt

@@ -20,7 +20,7 @@ import android.os.Bundle
 import androidx.fragment.app.Fragment
 import com.drake.net.Get
 import com.drake.net.sample.R
-import com.drake.net.sample.callback.GsonConvert
+import com.drake.net.sample.convert.GsonConvert
 import com.drake.net.sample.mod.Model
 import com.drake.net.utils.scopeNetLife
 import kotlinx.android.synthetic.main.fragment_custom_convert.*

+ 1 - 1
sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt

@@ -31,7 +31,7 @@ class InterceptorFragment : Fragment(R.layout.fragment_interceptor) {
 
         scopeNetLife {
             tv_fragment.text = Get<String>("api") {
-                // 拦截器只支持全局, 无法单例, 请查看[com.drake.net.sample.callback.NetInterceptor]
+                // 拦截器只支持全局, 无法单例, 请查看[com.drake.net.sample.interceptor.NetInterceptor]
             }.await()
         }
     }