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 优化请求
相关推荐
donecoding1 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马1 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren2 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川2 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
jinanwuhuaguo2 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw
广州华水科技2 小时前
深度测评2026年单北斗GNSS位移监测系统推荐,与高口碑变形监测设备一同引领行业新风尚
前端
Alice-YUE3 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
是上好佳佳佳呀4 小时前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
CDN3604 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库