Browse Source

添加错误处理器: NetErrorHandler, 废弃onError/onStateError

drake 4 năm trước cách đây
mục cha
commit
73c3ea0708

+ 8 - 2
net/src/main/java/com/drake/net/NetConfig.kt

@@ -30,6 +30,7 @@ import com.drake.net.NetConfig.onStateError
 import com.drake.net.convert.NetConverter
 import com.drake.net.exception.*
 import com.drake.net.interceptor.RequestInterceptor
+import com.drake.net.interfaces.NetErrorHandler
 import com.drake.net.scope.DialogCoroutineScope
 import com.drake.tooltip.toast
 import okhttp3.Call
@@ -42,11 +43,15 @@ import java.util.concurrent.*
 /**
  * Net的全局配置
  *
- * @property host 全局的域名或者ip(baseUrl)
  * @property app 全局上下文, 一般执行[initNet]即可, 无需手动赋值
+ * @property host 全局的域名或者ip(baseUrl)
+ * @property runningCalls Net中正在运行的请求Call
+ * @property requestInterceptor 请求拦截器
+ * @property logEnabled 是否启用日志
  * @property onDialog 全局加载框
  * @property onError 全局错误处理
  * @property onStateError 全局缺省页错误处理
+ * @property errorHandler 全局错误处理器, 会覆盖onError/onStateError
  */
 @SuppressLint("StaticFieldLeak")
 object NetConfig {
@@ -59,6 +64,7 @@ object NetConfig {
     var runningCalls: ConcurrentLinkedQueue<WeakReference<Call>> = ConcurrentLinkedQueue()
     var converter: NetConverter = NetConverter.DEFAULT
     var requestInterceptor: RequestInterceptor? = null
+    var errorHandler = NetErrorHandler()
 
     var onDialog: DialogCoroutineScope.(FragmentActivity) -> Dialog = {
         val progress = ProgressDialog(activity)
@@ -93,7 +99,7 @@ object NetConfig {
             is ConvertException,
             is RequestParamsException,
             is ResponseException,
-            is NullPointerException -> onError(this)
+            is NullPointerException -> errorHandler.onError(this)
             else -> if (logEnabled) printStackTrace()
         }
     }

+ 2 - 4
net/src/main/java/com/drake/net/interfaces/NetCallback.kt

@@ -40,14 +40,12 @@ abstract class NetCallback<T> : Callback {
     /**
      * 请求错误
      */
-    fun onError(call: Call, e: IOException) {
-        NetConfig.onError.invoke(e)
-    }
+    open fun onError(call: Call, e: IOException) = NetConfig.errorHandler.onError(e)
 
     /**
      * 请求完成
      *
      * @param e 正常结束则为NULL, 发生异常结束则为异常对象
      */
-    fun onComplete(call: Call, e: IOException?) {}
+    open fun onComplete(call: Call, e: IOException?) {}
 }

+ 17 - 0
net/src/main/java/com/drake/net/interfaces/NetErrorHandler.kt

@@ -0,0 +1,17 @@
+package com.drake.net.interfaces
+
+import android.view.View
+import com.drake.net.NetConfig
+
+open class NetErrorHandler {
+
+    /**
+     * 全局错误
+     */
+    open fun onError(e: Throwable) = NetConfig.onError(e)
+
+    /**
+     * 自动缺省页错误
+     */
+    open fun onStateError(e: Throwable, view: View) = NetConfig.onStateError(e, view)
+}

+ 12 - 0
net/src/main/java/com/drake/net/okhttp/OkHttpExtension.kt

@@ -23,6 +23,7 @@ import com.drake.net.NetConfig
 import com.drake.net.convert.NetConverter
 import com.drake.net.interceptor.NetOkHttpInterceptor
 import com.drake.net.interceptor.RequestInterceptor
+import com.drake.net.interfaces.NetErrorHandler
 import com.drake.net.request.label
 import com.drake.net.scope.DialogCoroutineScope
 import com.drake.net.tag.NetLabel
@@ -137,6 +138,7 @@ fun OkHttpClient.Builder.setRequestInterceptor(interceptor: RequestInterceptor)
 /**
  * 全局网络请求错误捕获
  */
+@Deprecated(message = "使用NetErrorHandler统一处理错误", replaceWith = ReplaceWith("setErrorHandler(NetErrorHandler())"), DeprecationLevel.WARNING)
 fun OkHttpClient.Builder.onError(block: Throwable.() -> Unit) = apply {
     NetConfig.onError = block
 }
@@ -144,10 +146,20 @@ fun OkHttpClient.Builder.onError(block: Throwable.() -> Unit) = apply {
 /**
  * 全局缺省页错误捕获
  */
+@Deprecated(message = "使用NetErrorHandler统一处理错误", replaceWith = ReplaceWith("setErrorHandler(NetErrorHandler())"), DeprecationLevel.WARNING)
 fun OkHttpClient.Builder.onStateError(block: Throwable.(view: View) -> Unit) = apply {
     NetConfig.onStateError = block
 }
 
+/**
+ * 全局错误处理器
+ *
+ * 会覆盖[onError]和[onStateError]
+ */
+fun OkHttpClient.Builder.setErrorHandler(handler: NetErrorHandler) = apply {
+    NetConfig.errorHandler = handler
+}
+
 /**
  * 全局加载对话框设置
  * 设置在使用scopeDialog自动弹出的加载对话框

+ 1 - 1
net/src/main/java/com/drake/net/scope/DialogCoroutineScope.kt

@@ -69,7 +69,7 @@ class DialogCoroutineScope(
     }
 
     override fun handleError(e: Throwable) {
-        NetConfig.onError(e)
+        NetConfig.errorHandler.onError(e)
     }
 
     override fun finally(e: Throwable?) {

+ 1 - 1
net/src/main/java/com/drake/net/scope/NetCoroutineScope.kt

@@ -79,7 +79,7 @@ open class NetCoroutineScope(
 
 
     override fun handleError(e: Throwable) {
-        NetConfig.onError(e)
+        NetConfig.errorHandler.onError(e)
     }
 
     override fun catch(e: Throwable) {

+ 2 - 2
net/src/main/java/com/drake/net/scope/PageCoroutineScope.kt

@@ -70,9 +70,9 @@ class PageCoroutineScope(
 
     override fun handleError(e: Throwable) {
         if (page.loaded || !page.stateEnabled) {
-            NetConfig.onError(e)
+            NetConfig.errorHandler.onError(e)
         } else {
-            NetConfig.onStateError(e, page)
+            NetConfig.errorHandler.onStateError(e, page)
         }
     }
 

+ 1 - 1
net/src/main/java/com/drake/net/scope/StateCoroutineScope.kt

@@ -59,7 +59,7 @@ class StateCoroutineScope(
     }
 
     override fun handleError(e: Throwable) {
-        NetConfig.onStateError(e, state)
+        NetConfig.errorHandler.onStateError(e, state)
     }
 
     override fun finally(e: Throwable?) {