Request¶
Request 基于 Call 封装并进行了拓展。
迁移到 Request2
Request 最初是为了兼容 java 和 kotlin 混编的项目,并为你提供了基于 ResponseStateListener 和 ResponseMutableLiveData 的方法实现,但是因为 Request 需要数据实现 ResponseApi 接口,这在某些场景下是不便的,因此在 0.5.1 版本推出了 Request2 , Request2 不需要你实现 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的参数,该方法目前会监听以下状态ErrorEmptySuccessFailed。OpenApi().create(OpenApiService::class.java) .sentences() .request(_sentence) -
监听
ResponseLiveData的状态具体使用参考观察状态发生变化。