Răsfoiți Sursa

更新转换器示例

drake 3 ani în urmă
părinte
comite
f41a6ac66b

+ 9 - 4
sample/src/main/java/com/drake/net/sample/converter/GsonConverter.kt

@@ -16,14 +16,19 @@
 
 package com.drake.net.sample.converter
 
-import com.drake.net.convert.JSONConvert
+import com.drake.net.convert.NetConverter
 import com.google.gson.GsonBuilder
+import okhttp3.Response
 import java.lang.reflect.Type
 
-class GsonConverter : JSONConvert(code = "code", message = "msg", success = "0") {
+class GsonConverter : NetConverter {
     private val gson = GsonBuilder().serializeNulls().create()
 
-    override fun <S> String.parseBody(succeed: Type): S? {
-        return gson.fromJson(this, succeed)
+    override fun <R> onConvert(succeed: Type, response: Response): R? {
+        return try {
+            NetConverter.DEFAULT.onConvert<R>(succeed, response)
+        } catch (e: Exception) {
+            gson.fromJson(response.body?.string(), succeed)
+        }
     }
 }

+ 4 - 3
sample/src/main/java/com/drake/net/sample/ui/fragment/converter/GsonConvertFragment.kt

@@ -22,6 +22,7 @@ import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.converter.GsonConverter
 import com.drake.net.sample.model.Model
+import com.drake.net.sample.model.UserModel
 import com.drake.net.utils.scopeNetLife
 import kotlinx.android.synthetic.main.fragment_custom_convert.*
 
@@ -37,9 +38,9 @@ class GsonConvertFragment : BaseConvertFragment(R.layout.fragment_custom_convert
         """.trimIndent()
 
         scopeNetLife {
-            tv_fragment.text = Get<Model>("api") {
-                converter = GsonConverter() // 单例转换器, 此时会忽略全局转换器
-            }.await().data.request_method
+            tv_fragment.text = Get<List<UserModel>>("list") {
+                converter = GsonConverter() // 单例转换器, 此时会忽略全局转换器, 在Net中可以直接解析List等嵌套泛型数据
+            }.await()[0].name
         }
     }
 

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

@@ -32,7 +32,7 @@ class SerializationConvertFragment : BaseConvertFragment(R.layout.fragment_custo
         tv_convert_tip.text = """
             1. kotlin官方出品, 推荐使用 
             2. kotlinx.serialization 是Kotlin上是最完美的序列化工具 
-            3. 相对其他解析库他解决泛型擦除机制, 支持任何泛型, 可直接返回Map/List/Pair...
+            3. 支持多种反序列化数据类型Pair/枚举/Map...
             4. 多配置选项
             5. 支持动态解析
             6. 支持ProtoBuf/CBOR/JSON等数据