跳转至

Request2

Request2 配合 Kotlin 的 协程Flow 能够简化网络请求流程。

关于测试接口说明

感谢 开放API-2.0 提供的开源免费接口

快速开始

  • 定义数据类型。

    /**
     * 通过 Api 请求到的好看视频测试数据。
     *
     * @property code 返回代码。
     * @property message 返回信息。
     * @property result 包含请求到的好看视频列表。
     */
    data class Videos(val code: Int, val message: String, val result: Result) {
        data class Result(val list: List<Data>, val total: Int)
    
        data class Data(
            val coverUrl: String,
            val duration: String,
            val id: Int,
            val playUrl: String,
            val title: String,
            val userName: String,
            val userPic: String
        )
    }
    
  • 创建网络请求的接口。

    interface Request2Service {
        /**
        * [获取好看视频](https://api.apiopen.top/swagger/index.html#/%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3/get_api_getHaoKanVideo)
        */
        @GET("/api/getHaoKanVideo")
        suspend fun getHaoKanVideo(@Query("page") page: Int, @Query("size") size: Int): Request2<Videos>
    }
    
  • 使用 RequestBuilder 创建实例。

    class NetRequestBuilder : RequestBuilder("https://api.apiopen.top") {
        override fun retrofitConfiguration(builder: Retrofit.Builder) {
            super.retrofitConfiguration(builder)
            builder.apply {
                addConverterFactory(GsonConverterFactory.create())
            }
        }
    }
    

    如果你不想使用 RequestBuilder ,你需要为 Retrofit.Builder 添加 Request2AdapterFactory 以便数据能够正确解析。

    yourRetrofitBuilder.addCallAdapterFactory(Request2AdapterFactory())
    

    通过 RequestBuilder.getApi 方法你可以获取对应的 flow ,你可以对此进行收集和处理。

  • 监听网络请求结果。

    NetRequestBuilder()
        .getApi(Request2Service::class.java) {
            getHaoKanVideo(page = 0, size = 2)
        }.collect {
            text = when (it) {
                is Request2.Success -> it.data.result.list.get(0).title
                is Request2.Empty -> "这是一条空数据"
                is Request2.Exception -> "遇到异常 ${it.exception}"
                is Request2.Failure -> "${it.code} ${it.message}"
                else -> ""
            }
        }
    

示例代码

查看示例代码