Browse Source

新增无网络不可用异常

drake 3 years ago
parent
commit
0a085e4ae6

+ 5 - 1
net/src/main/java/com/drake/net/exception/NetException.kt

@@ -34,6 +34,10 @@ open class NetException(
 ) : IOException(message, cause) {
 
     override fun getLocalizedMessage(): String? {
-        return if (message != null) "$message (${request.url})" else "(${request.url})"
+        return if (message != null) {
+            "$message (${request.url})"
+        } else {
+            "(${request.url})"
+        }
     }
 }

+ 15 - 0
net/src/main/java/com/drake/net/exception/NetworkingException.kt

@@ -0,0 +1,15 @@
+package com.drake.net.exception
+
+import okhttp3.Request
+
+/**
+ * 无网络情况
+ * @param request 请求信息
+ * @param message 错误描述信息
+ * @param cause 错误原因
+ */
+class NetworkingException(
+    request: Request,
+    message: String? = null,
+    cause: Throwable? = null
+) : HttpFailureException(request, message, cause)

+ 13 - 5
net/src/main/java/com/drake/net/interceptor/NetOkHttpInterceptor.kt

@@ -1,15 +1,14 @@
 package com.drake.net.interceptor
 
+import com.drake.net.NetConfig
 import com.drake.net.body.toNetRequestBody
 import com.drake.net.body.toNetResponseBody
-import com.drake.net.exception.HttpFailureException
-import com.drake.net.exception.NetConnectException
-import com.drake.net.exception.NetSocketTimeoutException
-import com.drake.net.exception.NetUnknownHostException
+import com.drake.net.exception.*
 import com.drake.net.okhttp.attachToNet
 import com.drake.net.okhttp.detachFromNet
 import com.drake.net.request.downloadListeners
 import com.drake.net.request.uploadListeners
+import com.drake.net.utils.isNetworking
 import okhttp3.Interceptor
 import okhttp3.Response
 import java.net.ConnectException
@@ -33,7 +32,16 @@ object NetOkHttpInterceptor : Interceptor {
         } catch (e: ConnectException) {
             throw NetConnectException(request, cause = e)
         } catch (e: UnknownHostException) {
-            throw NetUnknownHostException(request, message = e.message)
+            val isNetworking = try {
+                NetConfig.app.isNetworking()
+            } catch (e: Exception) {
+                true
+            }
+            if (isNetworking) {
+                throw NetUnknownHostException(request, message = e.message)
+            } else {
+                throw NetworkingException(request)
+            }
         } catch (e: Throwable) {
             throw HttpFailureException(request, cause = e)
         }

+ 2 - 1
net/src/main/java/com/drake/net/interfaces/NetErrorHandler.kt

@@ -21,7 +21,8 @@ interface NetErrorHandler {
         val message = when (e) {
             is UnknownHostException -> NetConfig.app.getString(R.string.net_host_error)
             is URLParseException -> NetConfig.app.getString(R.string.net_url_error)
-            is NetConnectException -> NetConfig.app.getString(R.string.net_network_error)
+            is NetConnectException -> NetConfig.app.getString(R.string.net_connect_error)
+            is NetworkingException -> NetConfig.app.getString(R.string.net_networking_error)
             is NetSocketTimeoutException -> NetConfig.app.getString(
                 R.string.net_connect_timeout_error,
                 e.message

+ 25 - 0
net/src/main/java/com/drake/net/utils/NetUtils.kt

@@ -0,0 +1,25 @@
+package com.drake.net.utils
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+import android.os.Build
+
+/**
+ * 是否处于联网中
+ */
+fun Context.isNetworking(): Boolean {
+    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+        val networkCapabilities = connectivityManager.activeNetwork ?: return false
+        val actNw = connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
+        when {
+            actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
+            actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
+            actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
+            else -> false
+        }
+    } else {
+        connectivityManager.activeNetworkInfo?.isConnected == true
+    }
+}

+ 2 - 1
net/src/main/res/values/strings.xml

@@ -18,7 +18,8 @@
     <string name="app_name">Net</string>
 
     <!--网络请求异常-->
-    <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>