Skip to content

Request

Request 基于 Call 封装并进行了拓展。

迁移到 Request2

Request 最初是为了兼容 java 和 kotlin 混编的项目,并为你提供了基于 ResponseStateListenerResponseMutableLiveData 的方法实现,但是因为 Request 需要数据实现 ResponseApi 接口,这在某些场景下是不便的,因此在 0.5.1 版本推出了 Request2Request2 不需要你实现 ResponseApi 接口。因此如果你的项目使用 kotlin ,那么强烈推荐你使用 Request2

关于测试接口说明

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

快速开始

  • 定义数据类型,实现 ResponseApi 接口。

    data class Sentences(
        val code: Int,
        val message: String,
        val result: Result
    ) : ResponseApi {
        data class Result(
            val from: String,
            val name: String
        )
    
        override fun isSuccessful(): Boolean = code == 200
    
        override fun message(): String = message
    }
    
  • 创建网络请求的接口。

    interface OpenApiService {
        /**
         * 获取一句名言。
         */
        @GET("/api/sentences")
        fun sentences(): Request<Sentences>
    }
    
  • 使用 RequestBuilder 创建实例。

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

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

    yourRetrofitBuilder.addCallAdapterFactory(RequestAdapterFactory())
    
  • 监听网络请求结果

    OpenApi().create(OpenApiService::class.java)
        .sentences()
        .request {
            onSuccess = { ... // 请求成功时 }
            onError = { ... // 请求遇错误时 }
            onFailed = { ... // 请求失败时 }
        }
    

配合 ResponseLiveData 使用

  • 创建 ResponseLiveData 对象。

    private val _sentence = ResponseMutableLiveData<Sentences>()
    val sentence: ResponseLiveData<Sentences>
        get() = _sentence
    
  • 手动设置状态

    在获取到请求成功的结果后,使用 postValueAndSuccess 方法手动的改变状态。更多使用方法可以参考更新 ResponseLiveData 对象

    OpenApi().create(OpenApiService::class.java)
        .sentences()
        .request {
            onSuccess = { _sentence.postValueAndSuccess(it) }
            onError = { _sentence.postError(it) }
            onFailed = { code, message -> _sentence.postFailed(code, message) }
        }
    
  • 自动设置状态

    _sentence 作为 request 的参数,该方法目前会监听以下状态 Error Empty Success Failed

    OpenApi().create(OpenApiService::class.java)
        .sentences()
        .request(_sentence)
    
  • 监听 ResponseLiveData 的状态

    具体使用参考观察状态发生变化

示例代码

查看示例代码