|
@@ -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了
|