Retrofit 使用指南

Retrofit 是 Android 上最常用的网络请求库之一,它简化了 HTTP 请求的处理,支持 GET、POST、PUT、DELETE 等请求方式,并且可以配合 GsonMoshi 等解析 JSON 数据。

1. 添加依赖

build.gradle (Module 级) 中添加:

1
2
3
4
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Gson 解析 JSON
}

2. 创建 API 接口

定义 API 接口,例如获取用户信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.DELETE
import retrofit2.http.Body
import retrofit2.http.Path
import retrofit2.http.Header

interface ApiService {
@GET("users/{id}") // GET 请求
fun getUser(@Path("id") userId: Int): Call<User>

@POST("users") // POST 请求
fun createUser(@Body user: User): Call<User>

@PUT("users/{id}") // PUT 请求
fun updateUser(@Path("id") userId: Int, @Body user: User): Call<User>

@DELETE("users/{id}") // DELETE 请求
fun deleteUser(@Path("id") userId: Int): Call<Void>

@GET("users/{id}") // 添加自定义 Header
fun getUserWithHeader(@Path("id") userId: Int, @Header("Authorization") token: String): Call<User>
}

3. 定义数据模型

1
2
3
4
5
data class User(
val id: Int,
val name: String,
val email: String
)

4. 创建 Retrofit 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitClient {
private const val BASE_URL = "https://api.example.com/"

val instance: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}

5. 发起网络请求

GET 请求

1
2
3
4
5
6
7
8
9
10
11
12
13
val call = RetrofitClient.instance.getUser(1)
call.enqueue(object : retrofit2.Callback<User> {
override fun onResponse(call: Call<User>, response: retrofit2.Response<User>) {
if (response.isSuccessful) {
val user = response.body()
println("用户信息: ${user?.name}, ${user?.email}")
}
}

override fun onFailure(call: Call<User>, t: Throwable) {
println("请求失败: ${t.message}")
}
})

POST 请求

1
2
val newUser = User(0, "John Doe", "john@example.com")
val call = RetrofitClient.instance.createUser(newUser)

PUT 请求

1
2
val updatedUser = User(1, "Updated Name", "updated@example.com")
val call = RetrofitClient.instance.updateUser(1, updatedUser)

DELETE 请求

1
val call = RetrofitClient.instance.deleteUser(1)

添加 Header 请求

1
2
val token = "Bearer your_token_here"
val call = RetrofitClient.instance.getUserWithHeader(1, token)

6. 使用协程 (Coroutine) 优化请求

将 API 接口修改为使用 suspend 函数:

1
2
3
4
interface ApiService {
@GET("users/{id}")
suspend fun getUser(@Path("id") userId: Int): User
}

在 ViewModel 中调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch

class UserViewModel : ViewModel() {
fun fetchUser() {
viewModelScope.launch {
try {
val user = RetrofitClient.instance.getUser(1)
println("用户信息: ${user.name}, ${user.email}")
} catch (e: Exception) {
println("请求失败: ${e.message}")
}
}
}
}

7. 总结

  • GET、POST、PUT、DELETE 基本请求
  • 添加 Header 请求
  • 使用 suspend + Coroutine 优化请求

最后我想说想了解更多更全关于Rotrofit的知识去看书P451吧!!!