Browse Source

update demo

drake 3 years ago
parent
commit
e0e45e2745
33 changed files with 223 additions and 107 deletions
  1. 2 2
      docs/config.md
  2. 1 1
      docs/kotlin-serialization.md
  3. 1 1
      sample/src/main/java/com/drake/net/sample/base/App.kt
  4. 7 2
      sample/src/main/java/com/drake/net/sample/converter/FastJsonConverter.kt
  5. 8 3
      sample/src/main/java/com/drake/net/sample/converter/GsonConverter.kt
  6. 9 3
      sample/src/main/java/com/drake/net/sample/converter/MoshiConverter.kt
  7. 3 3
      sample/src/main/java/com/drake/net/sample/converter/SerializationConverter.kt
  8. 14 0
      sample/src/main/java/com/drake/net/sample/model/CommonWebsite.kt
  9. 0 10
      sample/src/main/java/com/drake/net/sample/model/GameInfoModel.kt
  10. 59 0
      sample/src/main/java/com/drake/net/sample/model/HomeArticleModel.kt
  11. 15 0
      sample/src/main/java/com/drake/net/sample/model/HomeBannerModel.kt
  12. 0 25
      sample/src/main/java/com/drake/net/sample/model/Model.kt
  13. 3 3
      sample/src/main/java/com/drake/net/sample/model/UserViewModel.kt
  14. 3 4
      sample/src/main/java/com/drake/net/sample/ui/fragment/AutoDialogFragment.kt
  15. 1 1
      sample/src/main/java/com/drake/net/sample/ui/fragment/CallbackRequestFragment.kt
  16. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt
  17. 2 2
      sample/src/main/java/com/drake/net/sample/ui/fragment/HttpsCertificateFragment.kt
  18. 1 1
      sample/src/main/java/com/drake/net/sample/ui/fragment/InterceptorFragment.kt
  19. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt
  20. 2 2
      sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt
  21. 5 7
      sample/src/main/java/com/drake/net/sample/ui/fragment/PullRefreshFragment.kt
  22. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/PushRefreshFragment.kt
  23. 1 1
      sample/src/main/java/com/drake/net/sample/ui/fragment/ReadCacheFragment.kt
  24. 10 10
      sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt
  25. 1 1
      sample/src/main/java/com/drake/net/sample/ui/fragment/StateLayoutFragment.kt
  26. 2 2
      sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt
  27. 1 1
      sample/src/main/java/com/drake/net/sample/ui/fragment/UniqueRequestFragment.kt
  28. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/converter/FastJsonConvertFragment.kt
  29. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/converter/GsonConvertFragment.kt
  30. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/converter/MoshiConvertFragment.kt
  31. 3 3
      sample/src/main/java/com/drake/net/sample/ui/fragment/converter/SerializationConvertFragment.kt
  32. 1 1
      sample/src/main/res/layout/item_list.xml
  33. 50 0
      sample/src/main/res/layout/item_pull_list.xml

+ 2 - 2
docs/config.md

@@ -9,7 +9,7 @@
         override fun onCreate() {
             super.onCreate()
     
-            // http://google.com/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
+            // https://github.com/liangjingkanji/Net/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
             NetConfig.initialize("https://github.com/liangjingkanji/Net/", this) {
                 // 超时配置, 默认是10秒, 设置太长时间会导致用户等待过久
                 connectTimeout(30, TimeUnit.SECONDS)
@@ -28,7 +28,7 @@
     class App : Application() {
         override fun onCreate() {
             super.onCreate()
-            // http://google.com/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
+            // https://github.com/liangjingkanji/Net/  这是接口全局域名, 可以使用NetConfig.host进行单独的修改
             val okHttpClientBuilder = OkHttpClient.Builder()
                 .setDebug(BuildConfig.DEBUG)
                 .setConverter(SerializationConverter())

+ 1 - 1
docs/kotlin-serialization.md

@@ -26,7 +26,7 @@
 
 === "全局配置"
     ```kotlin
-    NetConfig.initialize("http://google.com/") {
+    NetConfig.initialize("https://github.com/liangjingkanji/Net/") {
         setConverter(SerializationConvert())
         // ... 其他配置
     }

+ 1 - 1
sample/src/main/java/com/drake/net/sample/base/App.kt

@@ -45,7 +45,7 @@ class App : Application() {
     override fun onCreate() {
         super.onCreate()
 
-        NetConfig.initialize("http://42.192.180.145/", this) {
+        NetConfig.initialize("https://www.wanandroid.com/", this) {
 
             // 超时设置
             connectTimeout(30, TimeUnit.SECONDS)

+ 7 - 2
sample/src/main/java/com/drake/net/sample/converter/FastJsonConverter.kt

@@ -18,11 +18,16 @@ package com.drake.net.sample.converter
 
 import com.alibaba.fastjson.JSON
 import com.drake.net.convert.JSONConvert
+import org.json.JSONObject
 import java.lang.reflect.Type
 
-class FastJsonConverter : JSONConvert(code = "code", message = "msg", success = "0") {
+class FastJsonConverter : JSONConvert(code = "errorCode", message = "errorMsg", success = "0") {
 
     override fun <R> String.parseBody(succeed: Type): R? {
-        return JSON.parseObject(this, succeed)
+        return try {
+            JSON.parseObject(JSONObject(this).getString("data"), succeed)
+        } catch (e: Exception) {
+            JSON.parseObject(this, succeed)
+        }
     }
 }

+ 8 - 3
sample/src/main/java/com/drake/net/sample/converter/GsonConverter.kt

@@ -18,14 +18,19 @@ package com.drake.net.sample.converter
 
 import com.drake.net.convert.JSONConvert
 import com.google.gson.GsonBuilder
+import org.json.JSONObject
 import java.lang.reflect.Type
 
-class GsonConverter : JSONConvert() {
+class GsonConverter : JSONConvert(code = "errorCode", message = "errorMsg") {
     companion object {
-        val gson = GsonBuilder().serializeNulls().create()
+        private val gson = GsonBuilder().serializeNulls().create()
     }
 
     override fun <R> String.parseBody(succeed: Type): R? {
-        return gson.fromJson(this, succeed)
+        return try {
+            gson.fromJson(JSONObject(this).getString("data"), succeed)
+        } catch (e: Exception) {
+            gson.fromJson(this, succeed)
+        }
     }
 }

+ 9 - 3
sample/src/main/java/com/drake/net/sample/converter/MoshiConverter.kt

@@ -18,15 +18,21 @@ package com.drake.net.sample.converter
 
 import com.drake.net.convert.JSONConvert
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
+import org.json.JSONObject
 import java.lang.reflect.Type
 
-class MoshiConverter : JSONConvert(code = "code", message = "msg", success = "0") {
+class MoshiConverter : JSONConvert(code = "errorCode", message = "errorMsg", success = "0") {
 
     companion object {
-        val moshi = Moshi.Builder().build()
+        private val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
     }
 
     override fun <R> String.parseBody(succeed: Type): R? {
-        return moshi.adapter<R>(succeed).fromJson(this)
+        return try {
+            moshi.adapter<R>(succeed).fromJson(JSONObject(this).getString("data"))
+        } catch (e: Exception) {
+            moshi.adapter<R>(succeed).fromJson(this)
+        }
     }
 }

+ 3 - 3
sample/src/main/java/com/drake/net/sample/converter/SerializationConverter.kt

@@ -19,8 +19,8 @@ import kotlin.reflect.KType
 
 class SerializationConverter(
     val success: String = "0",
-    val code: String = "code",
-    val message: String = "msg"
+    val code: String = "errorCode",
+    val message: String = "errorMsg",
 ) : NetConverter {
 
     companion object {
@@ -44,7 +44,7 @@ class SerializationConverter(
                         val json = JSONObject(bodyString) // 获取JSON中后端定义的错误码和错误信息
                         val srvCode = json.getString(this.code)
                         if (srvCode == success) { // 对比后端自定义错误码
-                            bodyString.parseBody<R>(kType)
+                            json.getString("data").parseBody<R>(kType)
                         } else { // 错误码匹配失败, 开始写入错误异常
                             val errorMessage = json.optString(message, NetConfig.app.getString(com.drake.net.R.string.no_error_message))
                             throw ResponseException(response, errorMessage, tag = srvCode) // 将业务错误码作为tag传递

+ 14 - 0
sample/src/main/java/com/drake/net/sample/model/CommonWebsite.kt

@@ -0,0 +1,14 @@
+package com.drake.net.sample.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class CommonWebsite(
+    var category: String = "",
+    var icon: String = "",
+    var id: Int = 0,
+    var link: String = "",
+    var name: String = "",
+    var order: Int = 0,
+    var visible: Int = 0
+)

+ 0 - 10
sample/src/main/java/com/drake/net/sample/model/GameInfoModel.kt

@@ -1,10 +0,0 @@
-package com.drake.net.sample.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class GameInfoModel(
-    var id: Int = 0,
-    var name: String = "",
-    var desc: String = "", // 该字段在接口数据中不存在, 但是由于存在默认值不会影响正常解析
-)

+ 59 - 0
sample/src/main/java/com/drake/net/sample/model/HomeArticleModel.kt

@@ -0,0 +1,59 @@
+package com.drake.net.sample.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class HomeArticleModel(
+    var curPage: Int = 0,
+    var datas: List<Data> = listOf(),
+    var offset: Int = 0,
+    var over: Boolean = false,
+    var pageCount: Int = 0,
+    var size: Int = 0,
+    var total: Int = 0
+) {
+
+    @Serializable
+    data class Data(
+        var apkLink: String = "",
+        var audit: Int = 0,
+        var author: String = "",
+        var canEdit: Boolean = false,
+        var chapterId: Int = 0,
+        var chapterName: String = "",
+        var collect: Boolean = false,
+        var courseId: Int = 0,
+        var desc: String = "",
+        var descMd: String = "",
+        var envelopePic: String = "",
+        var fresh: Boolean = false,
+        var host: String = "",
+        var id: Int = 0,
+        var link: String = "",
+        var niceDate: String = "",
+        var niceShareDate: String = "",
+        var origin: String = "",
+        var prefix: String = "",
+        var projectLink: String = "",
+        var publishTime: Long = 0,
+        var realSuperChapterId: Int = 0,
+        var selfVisible: Int = 0,
+        var shareDate: Long = 0,
+        var shareUser: String = "",
+        var superChapterId: Int = 0,
+        var superChapterName: String = "",
+        var tags: List<Tag> = listOf(),
+        var title: String = "",
+        var type: Int = 0,
+        var userId: Int = 0,
+        var visible: Int = 0,
+        var zan: Int = 0
+    ) {
+
+        @Serializable
+        data class Tag(
+            var name: String = "",
+            var url: String = ""
+        )
+    }
+}

+ 15 - 0
sample/src/main/java/com/drake/net/sample/model/HomeBannerModel.kt

@@ -0,0 +1,15 @@
+package com.drake.net.sample.model
+
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class HomeBannerModel(
+    var desc: String = "",
+    var id: Int = 0,
+    var imagePath: String = "",
+    var isVisible: Int = 0,
+    var order: Int = 0,
+    var title: String = "",
+    var type: Int = 0,
+    var url: String = ""
+)

+ 0 - 25
sample/src/main/java/com/drake/net/sample/model/Model.kt

@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2018 Drake, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.drake.net.sample.model
-
-import kotlinx.serialization.Serializable
-
-@Serializable
-data class Model(var code: Int, var msg: String, var data: Data) {
-    @Serializable
-    data class Data(var request_method: String)
-}

+ 3 - 3
sample/src/main/java/com/drake/net/sample/model/UserViewModel.kt

@@ -18,15 +18,15 @@ class UserViewModel : ViewModel() {
      * scopeNetLife/scopeDialog不推荐写在ViewModel中
      */
     fun fetchUserInfo() = scopeNetLife {
-        userInfo.value = Get<String>("api").await()
+        userInfo.value = Get<String>("banner/json").await()
     }
 
     /** 返回Deferred, 可以灵活使用, 支持并发组合 */
-    fun CoroutineScope.fetchList() = Get<String>("api")
+    fun CoroutineScope.fetchList() = Get<String>("banner/json")
 
     /** 直接返回数据, 会阻塞直至数据返回 */
     suspend fun fetchPrecessData() = coroutineScope {
-        val response = Get<String>("api").await()
+        val response = Get<String>("banner/json").await()
         response + "处理数据"
     }
 }

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

@@ -21,7 +21,6 @@ import com.drake.net.Post
 import com.drake.net.sample.R
 import com.drake.net.sample.databinding.FragmentAutoDialogBinding
 import com.drake.net.utils.scopeDialog
-import com.drake.tooltip.dialog.BubbleDialog
 import com.drake.tooltip.toast
 import kotlinx.coroutines.CancellationException
 
@@ -31,9 +30,9 @@ class AutoDialogFragment :
 
     override fun initView() {
         scopeDialog {
-            binding.tvFragment.text = Post<String>("dialog") {
-                param("u_name", "drake")
-                param("pwd", "123456")
+            binding.tvFragment.text = Post<String>("user/login") {
+                param("username", "你的账号")
+                param("password", "123456")
             }.await()
         }.finally {
             // 关闭对话框后执行的异常

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

@@ -18,7 +18,7 @@ class CallbackRequestFragment :
 
     override fun initView() {
         // Net同样支持OkHttp原始的队列任务
-        Net.post("api").enqueue(object : Callback {
+        Net.post("banner/json").enqueue(object : Callback {
             override fun onFailure(call: Call, e: IOException) {
             }
 

+ 3 - 3
sample/src/main/java/com/drake/net/sample/ui/fragment/FastestFragment.kt

@@ -34,8 +34,8 @@ class FastestFragment : EngineFragment<FragmentFastestBinding>(R.layout.fragment
             */
 
             // 同时发起四个网络请求
-            val deferred2 = Get<String>("api") { setGroup("最快") }
-            val deferred3 = Post<String>("api") { setGroup("最快") }
+            val deferred2 = Get<String>("banner/json") { setGroup("最快") }
+            val deferred3 = Post<String>("navi/json") { setGroup("最快") }
             val deferred = Get<String>("api0") { setGroup("最快") } // 错误接口
             val deferred1 = Get<String>("api1") { setGroup("最快") } // 错误接口
 
@@ -53,7 +53,7 @@ class FastestFragment : EngineFragment<FragmentFastestBinding>(R.layout.fragment
         //     // 同时发起四个网络请求
         //     val requestList = mutableListOf<DeferredTransform<String, String>>().apply {
         //         for (i in 0..28) {
-        //             val request = Get<String>("api").transform {
+        //             val request = Get<String>("banner/json").transform {
         //                 Log.d("日志", "(FastestFragment.kt:73)    it = ${it}")
         //                 it
         //             }

+ 2 - 2
sample/src/main/java/com/drake/net/sample/ui/fragment/HttpsCertificateFragment.kt

@@ -26,7 +26,7 @@ class HttpsCertificateFragment :
      */
     private fun trustAllCertificate(view: View) {
         scopeNetLife {
-            binding.tvResponse.text = Get<String>("https://github.com/") {
+            binding.tvResponse.text = Get<String>("https://github.com/liangjingkanji/Net/") {
                 okHttpClient = OkHttpClient.Builder().build()
             }.await()
         }
@@ -37,7 +37,7 @@ class HttpsCertificateFragment :
      */
     private fun importCertificate(view: View) {
         scopeNetLife {
-            Get<String>("https://github.com/") {
+            Get<String>("https://github.com/liangjingkanji/Net/") {
                 setClient {
                     val privateCertificate = resources.assets.open("https.certificate")
                     setSSLCertificate(privateCertificate)

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

@@ -28,7 +28,7 @@ class InterceptorFragment :
 
     override fun initView() {
         scopeNetLife {
-            binding.tvFragment.text = Get<String>("api") {
+            binding.tvFragment.text = Get<String>("banner/json") {
                 // 拦截器只支持全局, 无法单例, 请查看[com.drake.net.sample.interceptor.NetInterceptor]
             }.await()
         }

+ 3 - 3
sample/src/main/java/com/drake/net/sample/ui/fragment/ParallelNetworkFragment.kt

@@ -32,9 +32,9 @@ class ParallelNetworkFragment :
         scopeNetLife {
 
             // 同时发起三个请求
-            val deferred = Get<String>("api")
-            val deferred1 = Post<String>("api")
-            val deferred2 = Trace<String>("api")
+            val deferred = Get<String>("banner/json")
+            val deferred1 = Post<String>("banner/json")
+            val deferred2 = Trace<String>("banner/json")
 
             // 同时接收三个请求数据
             deferred.await()

+ 2 - 2
sample/src/main/java/com/drake/net/sample/ui/fragment/PreviewCacheFragment.kt

@@ -34,13 +34,13 @@ class PreviewCacheFragment : EngineFragment<FragmentReadCacheBinding>(R.layout.f
 
         scopeNetLife {
             // 然后执行这里(网络请求)
-            binding.tvFragment.text = Get<String>("api") {
+            binding.tvFragment.text = Get<String>("banner/json") {
                 setCacheMode(CacheMode.WRITE)
             }.await()
             Log.d("日志", "网络请求")
         }.preview(true) {
             // 先执行这里(仅读缓存), 任何异常都视为读取缓存失败
-            binding.tvFragment.text = Get<String>("api") {
+            binding.tvFragment.text = Get<String>("banner/json") {
                 setCacheMode(CacheMode.READ)
             }.await()
             Log.d("日志", "读取缓存")

+ 5 - 7
sample/src/main/java/com/drake/net/sample/ui/fragment/PullRefreshFragment.kt

@@ -22,7 +22,7 @@ import com.drake.engine.base.EngineFragment
 import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.databinding.FragmentPullRefreshBinding
-import com.drake.net.sample.model.GameInfoModel
+import com.drake.net.sample.model.HomeArticleModel
 import com.drake.net.utils.scope
 
 
@@ -31,16 +31,14 @@ class PullRefreshFragment :
 
     override fun initView() {
         binding.rv.linear().setup {
-            addType<GameInfoModel>(R.layout.item_list)
+            addType<HomeArticleModel.Data>(R.layout.item_pull_list)
         }
 
         binding.page.onRefresh {
             scope {
-                val data = Get<List<GameInfoModel>>("list") {
-                    param("page", index)
-                }.await()
-                addData(data) {
-                    index < 100 // 最多加载100个
+                val response = Get<HomeArticleModel>("article/list/${index}/json").await()
+                addData(response.datas) {
+                    index < response.pageCount
                 }
             }
         }.autoRefresh()

+ 3 - 3
sample/src/main/java/com/drake/net/sample/ui/fragment/PushRefreshFragment.kt

@@ -23,7 +23,7 @@ import com.drake.engine.base.EngineFragment
 import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.databinding.FragmentPushRefreshBinding
-import com.drake.net.sample.model.GameInfoModel
+import com.drake.net.sample.model.CommonWebsite
 import com.drake.net.utils.scope
 
 /** 本页面已禁用上拉加载(添加xml属性app:srlEnableLoadMore="false"), 只允许下拉刷新 */
@@ -32,12 +32,12 @@ class PushRefreshFragment :
 
     override fun initView() {
         binding.rv.linear().setup {
-            addType<GameInfoModel>(R.layout.item_list)
+            addType<CommonWebsite>(R.layout.item_list)
         }
 
         binding.page.onRefresh {
             scope {
-                binding.rv.models = Get<List<GameInfoModel>>("list").await()
+                binding.rv.models = Get<List<CommonWebsite>>("friend/json").await()
             }
         }.autoRefresh()
     }

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

@@ -34,7 +34,7 @@ class ReadCacheFragment : EngineFragment<FragmentReadCacheBinding>(R.layout.frag
     override fun initView() {
         scopeNetLife {
             binding.tvFragment.text =
-                Post<String>("api") {
+                Post<String>("banner/json") {
                     setCacheMode(CacheMode.REQUEST_THEN_READ) // 请求网络失败会读取缓存, 请断网测试
                     // setCacheKey("自定义缓存KEY")
                 }.await()

+ 10 - 10
sample/src/main/java/com/drake/net/sample/ui/fragment/RequestMethodFragment.kt

@@ -40,49 +40,49 @@ class RequestMethodFragment :
 
     private fun GET() {
         scopeNetLife {
-            binding.tvFragment.text = Get<String>("api").await()
+            binding.tvFragment.text = Get<String>("banner/json").await()
         }
     }
 
     private fun POST() {
         scopeNetLife {
-            binding.tvFragment.text = Post<String>("api").await()
+            binding.tvFragment.text = Post<String>("banner/json").await()
         }
     }
 
     private fun HEAD() {
         scopeNetLife {
-            binding.tvFragment.text = Head<String>("api").await()
+            binding.tvFragment.text = Head<String>("banner/json").await()
         }
     }
 
     private fun PUT() {
         scopeNetLife {
-            binding.tvFragment.text = Put<String>("api").await()
+            binding.tvFragment.text = Put<String>("banner/json").await()
         }
     }
 
     private fun PATCH() {
         scopeNetLife {
-            binding.tvFragment.text = Patch<String>("api").await()
+            binding.tvFragment.text = Patch<String>("banner/json").await()
         }
     }
 
     private fun DELETE() {
         scopeNetLife {
-            binding.tvFragment.text = Delete<String>("api").await()
+            binding.tvFragment.text = Delete<String>("banner/json").await()
         }
     }
 
     private fun TRACE() {
         scopeNetLife {
-            binding.tvFragment.text = Trace<String>("api").await()
+            binding.tvFragment.text = Trace<String>("banner/json").await()
         }
     }
 
     private fun OPTIONS() {
         scopeNetLife {
-            binding.tvFragment.text = Options<String>("api").await()
+            binding.tvFragment.text = Options<String>("banner/json").await()
         }
     }
 
@@ -98,7 +98,7 @@ class RequestMethodFragment :
         scopeNetLife {
 
             // 创建JSONObject对象
-            // binding.tvFragment.text = Post<String>("api") {
+            // binding.tvFragment.text = Post<String>("banner/json") {
             //     json(JSONObject().run {
             //         put("name", name)
             //         put("age", age)
@@ -107,7 +107,7 @@ class RequestMethodFragment :
             // }.await()
 
             // 创建JSON
-            binding.tvFragment.text = Post<String>("api") {
+            binding.tvFragment.text = Post<String>("banner/json") {
                 json("name" to name, "age" to age, "measurements" to measurements) // 同时支持Map集合
             }.await()
         }

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

@@ -32,7 +32,7 @@ class StateLayoutFragment :
     override fun initView() {
         binding.state.onRefresh {
             scope {
-                binding.tvFragment.text = Get<String>("api").await()
+                binding.tvFragment.text = Get<String>("banner/json").await()
             }
         }.showLoading()
     }

+ 2 - 2
sample/src/main/java/com/drake/net/sample/ui/fragment/SyncRequestFragment.kt

@@ -12,12 +12,12 @@ class SyncRequestFragment :
     override fun initView() {
         thread { // 网络请求不允许在主线程
             val result = try {
-                Net.post("api").execute<String>()
+                Net.post("banner/json").execute<String>()
             } catch (e: Exception) { // 同步请求失败会导致崩溃要求捕获异常
                 "请求错误 = ${e.message}"
             }
 
-            // val result = Net.post("api").toResult<String>().getOrDefault("请求发生错误, 我这是默认值")
+            // val result = Net.post("banner/json").toResult<String>().getOrDefault("请求发生错误, 我这是默认值")
 
             binding.tvFragment?.post { // 这里用?号是避免界面被销毁依然赋值
                 binding.tvFragment?.text = result  // view要求在主线程更新

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

@@ -19,7 +19,7 @@ class UniqueRequestFragment :
             scope?.cancel() // 如果存在则取消
 
             scope = scopeNetLife {
-                val result = Post<String>("api").await()
+                val result = Post<String>("banner/json").await()
                 Log.d("日志", "请求到结果") // 你一直重复点击"发起请求"按钮会发现永远无法拿到请求结果, 因为每次发起新的请求会取消未完成的
                 binding.tvResult.text = result
             }

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

@@ -20,7 +20,7 @@ import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.converter.FastJsonConverter
 import com.drake.net.sample.databinding.FragmentCustomConvertBinding
-import com.drake.net.sample.model.Model
+import com.drake.net.sample.model.HomeBannerModel
 import com.drake.net.utils.scopeNetLife
 
 
@@ -34,9 +34,9 @@ class FastJsonConvertFragment :
         """.trimIndent()
 
         scopeNetLife {
-            binding.tvFragment.text = Get<Model>("api") {
+            binding.tvFragment.text = Get<List<HomeBannerModel>>("banner/json") {
                 converter = FastJsonConverter() // 单例转换器, 此时会忽略全局转换器
-            }.await().data.request_method
+            }.await()[0].desc
         }
     }
 

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

@@ -20,7 +20,7 @@ import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.converter.GsonConverter
 import com.drake.net.sample.databinding.FragmentCustomConvertBinding
-import com.drake.net.sample.model.GameInfoModel
+import com.drake.net.sample.model.HomeBannerModel
 import com.drake.net.utils.scopeNetLife
 
 
@@ -36,9 +36,9 @@ class GsonConvertFragment :
         """.trimIndent()
 
         scopeNetLife {
-            binding.tvFragment.text = Get<List<GameInfoModel>>("list") {
+            binding.tvFragment.text = Get<List<HomeBannerModel>>("banner/json") {
                 converter = GsonConverter() // 单例转换器, 此时会忽略全局转换器, 在Net中可以直接解析List等嵌套泛型数据
-            }.await()[0].name
+            }.await()[0].desc
         }
     }
 

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

@@ -20,7 +20,7 @@ import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.converter.MoshiConverter
 import com.drake.net.sample.databinding.FragmentCustomConvertBinding
-import com.drake.net.sample.model.Model
+import com.drake.net.sample.model.HomeBannerModel
 import com.drake.net.utils.scopeNetLife
 
 
@@ -37,9 +37,9 @@ class MoshiConvertFragment :
         """.trimIndent()
 
         scopeNetLife {
-            binding.tvFragment.text = Get<Model>("api") {
+            binding.tvFragment.text = Get<List<HomeBannerModel>>("banner/json") {
                 converter = MoshiConverter() // 单例转换器, 此时会忽略全局转换器
-            }.await().data.request_method
+            }.await()[0].desc
         }
     }
 

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

@@ -20,7 +20,7 @@ import com.drake.net.Get
 import com.drake.net.sample.R
 import com.drake.net.sample.converter.SerializationConverter
 import com.drake.net.sample.databinding.FragmentCustomConvertBinding
-import com.drake.net.sample.model.GameInfoModel
+import com.drake.net.sample.model.HomeBannerModel
 import com.drake.net.utils.scopeNetLife
 
 class SerializationConvertFragment :
@@ -37,12 +37,12 @@ class SerializationConvertFragment :
         """.trimIndent()
 
         scopeNetLife {
-            val userList = Get<List<GameInfoModel>>("list") {
+            val data = Get<List<HomeBannerModel>>("banner/json") {
                 // 该转换器直接解析JSON中的data字段, 而非返回的整个JSON字符串
                 converter = SerializationConverter() // 单例转换器, 此时会忽略全局转换器
             }.await()
 
-            binding.tvFragment.text = userList[0].name
+            binding.tvFragment.text = data[0].desc
         }
     }
 

+ 1 - 1
sample/src/main/res/layout/item_list.xml

@@ -21,7 +21,7 @@
 
         <variable
             name="m"
-            type="com.drake.net.sample.model.GameInfoModel" />
+            type="com.drake.net.sample.model.CommonWebsite" />
     </data>
 
     <LinearLayout

+ 50 - 0
sample/src/main/res/layout/item_pull_list.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2018 Drake, Inc.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="m"
+            type="com.drake.net.sample.model.HomeArticleModel.Data" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <FrameLayout
+            android:id="@+id/item"
+            android:layout_width="match_parent"
+            android:layout_height="100dp"
+            android:layout_margin="16dp"
+            android:background="@drawable/bg_card"
+            android:foreground="?selectableItemBackgroundBorderless">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:gravity="center"
+                android:text="@{m.title}"
+                android:textStyle="bold"
+                tools:text="1" />
+
+        </FrameLayout>
+
+    </LinearLayout>
+</layout>