Android Retrofit用法详解

Retrofit 使用指南

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

1. 添加依赖

build.gradle (Module 级) 中添加:

arduino 复制代码
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Gson 解析 JSON
}

2. 创建 API 接口

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

less 复制代码
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. 定义数据模型

kotlin 复制代码
data class User(
    val id: Int,
    val name: String,
    val email: String
)

4. 创建 Retrofit 实例

kotlin 复制代码
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 请求

kotlin 复制代码
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 请求

ini 复制代码
val newUser = User(0, "John Doe", "john@example.com")
val call = RetrofitClient.instance.createUser(newUser)

PUT 请求

ini 复制代码
val updatedUser = User(1, "Updated Name", "updated@example.com")
val call = RetrofitClient.instance.updateUser(1, updatedUser)

DELETE 请求

ini 复制代码
val call = RetrofitClient.instance.deleteUser(1)

添加 Header 请求

ini 复制代码
val token = "Bearer your_token_here"
val call = RetrofitClient.instance.getUserWithHeader(1, token)

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

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

kotlin 复制代码
interface ApiService {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") userId: Int): User
}

在 ViewModel 中调用:

kotlin 复制代码
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 优化请求
相关推荐
lbh32 分钟前
当我开始像写代码一样和AI对话,一切都变了
前端·openai·ai编程
We་ct1 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
wefly20172 小时前
m3u8live.cn 在线M3U8播放器,免安装高效验流排错
前端·后端·python·音视频·前端开发工具
C澒2 小时前
微前端容器标准化 —— 公共能力篇:通用打印
前端·架构
德育处主任Pro3 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
木斯佳3 小时前
前端八股文面经大全:小红书前端一二面OC(下)·(2026-03-17)·面经深度解析
前端·vue3·proxy·八股·响应式
陈天伟教授3 小时前
人工智能应用- 预测新冠病毒传染性:04. 中国:强力措施遏制疫情
前端·人工智能·安全·xss·csrf
zayzy3 小时前
前端八股总结
开发语言·前端·javascript
今天减肥吗3 小时前
前端面试题
开发语言·前端·javascript
Rabbit_QL4 小时前
【前端UI行话】前端 UI 术语速查表
前端·ui·状态模式