Browse Source

修订文档-转换器

drake 3 years ago
parent
commit
ac784f2c2e
5 changed files with 23 additions and 112 deletions
  1. 0 99
      docs/convert-json-array.md
  2. 15 6
      docs/convert-special.md
  3. 5 3
      docs/converter.md
  4. 1 1
      docs/kotlin-serialization.md
  5. 2 3
      mkdocs.yml

+ 0 - 99
docs/convert-json-array.md

@@ -1,99 +0,0 @@
-如果你使用[kotlin-serialization](kotlin-serialization.md)解析数据, 那就不存在以下问题(泛型擦除)可以不用继续读了
-
-首先我们知道Net可以通过泛型指定返回的数据类型
-
-```kotlin
-scopeNetLife {
-    tv_fragment.text = Post<UserModel>("api").await()
-}
-```
-
-如果是你解析的JSON对象中包含集合, 这种情况完全无需考虑. 直接解析JSON数组字段-data 才会存在以下的问题
-
-```json
-{
-    "code":200,
-    "msg":"错误信息",
-    "data": [
-        { "name": "彭于晏" },
-        { "name": "彭于晏" },
-        { "name": "彭于晏" }
-    ]
-}
-```
-
-如果后端直接返回JSON数组
-
-```json
-[
-    { "name": "彭于晏" },
-    { "name": "彭于晏" },
-    { "name": "彭于晏" }
-]
-```
-
-你们可能会这么写
-
-```kotlin
-scopeNetLife {
-    tv_fragment.text = Post<List<Model>>("api").await()
-}
-```
-
-> 但是由于Java的泛型擦除机制, 这么会发生异常无法转换成正确的数据返回
-
-
-解决办法
-
-1. 泛型使用Array替换List
-2. 泛型使用String, 然后写扩展函数转换下
-
-## 使用Array
-
-```kotlin
-scopeNetLife {
-    val arr = Post<Array<UserModel>>("api").await()
-    arr.toMutableList() // 如果你就是要求集合, 可以使用函数将数组转换成集合
-}
-```
-
-## 使用扩展函数
-
-我们可以直接使用String创建一个扩展函数
-
-```kotlin
-scopeNetLife {
-    tv_fragment.text = Post<String>("api").await().toJsonArray<List<UserModel>>()
-}
-```
-
-
-### 1. 定义解析函数
-
-创建一个顶层函数(即在类之外的函数, 直接存在kt文件中)
-
-FastJSON解析库演示
-
-```kotlin
-inline fun <reified T> String.toJsonArray(): MutableList<T> {
-    return JSON.parseArray(this, T::class.java)
-}
-```
-
-Gson解析库演示
-
-```kotlin
-inline fun <reified T> String.toJsonArray(): MutableList<T> {
-    return Gson().fromJson(this, TypeToken.getParameterized(List::class.java, T::class.java).type)
-}
-```
-
-### 2. 使用
-
-```kotlin
-scopeNetLife {
-    val listData = Post<String>("/list").await().toJsonArray<Info>()
-}
-```
-
-> 该扩展函数太简单我就不加入到框架中了, 大家复制粘贴下就OK了

+ 15 - 6
docs/convert-data-field.md → docs/convert-special.md

@@ -1,5 +1,5 @@
 
-## 具备状态码的JSON
+## 解析完整Json
 
 一般的解析过程是以下
 
@@ -37,7 +37,7 @@ scopeNetLife {
 }
 ```
 
-## 摘取Data字段
+## 仅解析数据字段
 
 这样每次都要`await().data`才是你要的`data`对象. 有些人就想省略直接不写code和msg, 希望直接返回data. 那么在转换器里面就只解析data字段即可
 
@@ -68,7 +68,19 @@ scopeNetLife {
 }
 ```
 
-## 使用泛型数据对象
+## 解析Json数组
+
+在Net中可以直接解析List等嵌套泛型数据, 解析List和普通对象没有区别
+
+```kotlin
+scopeNetLife {
+    tv_fragment.text = Get<List<UserModel>>("list") {
+        converter = GsonConverter() // 单例转换器, 一般情况下是定义一个全局转换器
+    }.await()[0].name
+}
+```
+
+## 解析泛型数据模型
 
 这种方式在Retrofit中经常被使用到, 可能某些人比较习惯
 
@@ -92,6 +104,3 @@ scopeNetLife {
     val data = Get<Result>("api").await().request_method
 }
 ```
-
-> 但这种方式比较愚钝冗余, 推荐使用[kotlin-serialization 解析任何泛型](kotlin-serialization.md)
-

+ 5 - 3
docs/converter.md

@@ -1,11 +1,11 @@
 网络请求响应被封装到Response对象中, 普通接口我们需要读取映射到数据模型对象中
 
-Net使用泛型指定返回数据类型
+Net使用泛型指定返回数据类型, 支持List等嵌套泛型对象
 
 ```kotlin
 scopeNetLife {
-    val userList = Get<List<UserModel>>("list-data") {
-        converter = SerializationConverter()
+    val userList = Get<List<UserModel>>("list") {
+        converter = GsonConverter()
     }.await()
 }
 ```
@@ -131,6 +131,8 @@ Demo截图预览
 2. 推荐使用 `kotlinx.Serialization`, 其可解析[任何泛型](kotlin-serialization.md)
 3. 推荐阅读Demo
 
+以上转换器示例是建立在数据结构为以下表格的固定格式下, 如果有特殊的业务可能需要自行修改
+
 | 转换器参数 | 描述 |
 |-|-|
 | code | 即后端定义的`成功码`字段名 |

+ 1 - 1
docs/kotlin-serialization.md

@@ -1,7 +1,7 @@
 从Net3开始支持使用[kotlin-serialization](https://github.com/Kotlin/kotlinx.serialization)(简称KS). 我愿称他为最强序列化库
 
 <br>
-**Net是目前唯一支持kotlin-serialization转换器的网络请求库**
+**Net完美支持kotlin-serialization创建转换器**
 
 ## kotlin-serialization 特点
 

+ 2 - 3
mkdocs.yml

@@ -49,9 +49,8 @@ nav:
   - Https证书: https.md
   - 自定义转换器:
       - 创建转换器: converter.md
-      - 解析任何泛型: kotlin-serialization.md
-      - 转换Data字段: convert-data-field.md
-      - 转换JSON数组: convert-json-array.md
+      - 特殊结构解析: convert-special.md
+      - kotlin-serialization: kotlin-serialization.md
   - 异常追踪: exception-track.md
   - 自动化:
       - 自动加载框: auto-dialog.md