Appearance
Retrofit 的基本用法,包括发送最简单的 GET 请求、发送表单、上传文件。
Retrofit 和 OKHttp
OKHttp 是一个纯净的 HTTP 客户端,负责底层网络操作。而 Retrofit 是在 OKHttp 之上再做一层 REST 抽象。
安装
groovy
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
使用
- 根据 Restful API 定义接口
- 配置一个 Retrofit 实例
- 使用 Retrofit 实例和第一步定义的接口创建 RequestServices 实例
- 通过 RequestServices 实例调用接口方法创建 Call 对象
- Call 对象通过
execute()
或enqueue()
发出请求
接口
kotlin
interface IDemoAPI {
@GET("user/{id}")
fun getUser(@Path("id") id: String, @Query("detail") detail: Boolean)
@FormUrlEncoded
@POST("login")
fun login(@Field("username") username: String,
@Field("password") password: String): Call<String>
@Multipart
@POST("file")
fun upload(@Part file: MultipartBody.Part): Call<String>
@Multipart
@POST("files")
fun upload(@Part files: Array<MultipartBody.Part>): Call<String>
}
创建 RequestServices 实例
kotlin
class APIGenerator {
companion object {
// 一定要以斜杆结尾
private val kBaseUrl = "https://keng42.com/api/v1/"
private val retrofitBuilder = Retrofit.Builder()
.baseUrl(kBaseUrl)
.addConverterFactory(GsonConverterFactory.create()) ?:
throw Exception("null retrofit builder")
private val okHttpClientBuilder = OkHttpClient.Builder()
fun <T> createAPI(apiClass: Class<T>): T {
retrofitBuilder.client(okHttpClientBuilder.build())
val retrofit = retrofitBuilder.build()
return retrofit.create(apiClass)
}
}
}
发起请求
kotlin
// h_ttps://keng42.com/api/v1/user/0?detail=true
val demoAPI = APIGenerator.createAPI(IDemoAPI::class.java)
val call = demoAPI.getUser("0", true)
call.enqueue(object : Callback<String> {
override fun onFailure(call: Call<String>?, t: Throwable?) {
t?.printStackTrace()
}
override fun onResponse(call: Call<String>?, response: Response<String>?) {
response?.body()
}
})
val file = File(filePath)
val body = RequestBody.create(MediaType.parse("multipart/form-data"), file)
val form = MultipartBody.Part.createFormData("smfile", file.name, body)
demoAPI.upload(form).execute()