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 优化请求
相关推荐
开开心心就好1 分钟前
手机精确倒计时工具悬浮窗口秒数实时显示
android·前端·javascript·jupyter·智能手机·pdf·html
小江的记录本8 分钟前
【HTML】HTML5 新特性、语义化标签、浏览器渲染流程(附《思维导图》)
前端·css·面试·前端框架·html·css3·html5
风骏时光牛马23 分钟前
手机端高效实用技巧,看完直接上手用
前端
索西引擎26 分钟前
【Vue】Vue.js 3 声明式渲染架构的设计原理与模块协同机制研究
前端·javascript·vue.js
mayaairi2 小时前
Vue2 事件绑定完全指南:从入门到原理
前端·javascript·vue.js
ℋᙚᵐⁱᒻᵉ鲸落8 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙10 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow11 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上11 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化