diff --git a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt index 2830e3ddd..bae097215 100644 --- a/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt +++ b/app/src/main/java/io/legado/app/help/source/BookSourceExtensions.kt @@ -64,8 +64,8 @@ suspend fun BookSource.exploreKinds(): List { } } if (ruleStr.isJsonArray()) { - GSON.fromJsonArray(ruleStr).getOrThrow().let { - kinds.addAll(it.filterNotNull()) + GSON.fromJsonArray(ruleStr).getOrThrow().let { + kinds.addAll(it) } } else { ruleStr.split("(&&|\n)+".toRegex()).forEach { kindStr -> diff --git a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt index 4ea23f2a9..a7b03ec85 100644 --- a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt @@ -65,10 +65,13 @@ inline fun Gson.fromJsonArray(json: String?): Result> { if (json == null) { throw JsonSyntaxException("解析字符串为空") } - fromJson( - json, - TypeToken.getParameterized(List::class.java, T::class.java).type - ) as List + val type = TypeToken.getParameterized(List::class.java, T::class.java).type + val list = fromJson(json, type) as List + if (list.contains(null)) { + throw JsonSyntaxException("存在null") + } + @Suppress("UNCHECKED_CAST") + list as List } } @@ -88,10 +91,13 @@ inline fun Gson.fromJsonArray(inputStream: InputStream?): Result + val type = TypeToken.getParameterized(List::class.java, T::class.java).type + val list = fromJson(reader, type) as List + if (list.contains(null)) { + throw JsonSyntaxException("存在null") + } + @Suppress("UNCHECKED_CAST") + list as List } } @@ -150,6 +156,7 @@ class IntJsonDeserializer : JsonDeserializer { null } } + else -> null } } @@ -182,6 +189,7 @@ class MapDeserializerDoubleAsIntFix : } return list } + json.isJsonObject -> { val map: MutableMap = LinkedTreeMap() @@ -193,15 +201,18 @@ class MapDeserializerDoubleAsIntFix : } return map } + json.isJsonPrimitive -> { val prim = json.asJsonPrimitive when { prim.isBoolean -> { return prim.asBoolean } + prim.isString -> { return prim.asString } + prim.isNumber -> { val num: Number = prim.asNumber // here you can handle double int/long values