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 优化请求
相关推荐
一枚前端小能手3 分钟前
「周更第3期」实用JS库推荐:Lodash
前端·javascript
艾小码4 分钟前
Vue组件到底怎么定义?全局注册和局部注册,我踩过的坑你别再踩了!
前端·javascript·vue.js
Cyan_RA910 分钟前
计算机网络面试题 — TCP连接如何确保可靠性?
前端·后端·面试
谢尔登10 分钟前
【CSS】层叠上下文和z-index
前端·css
鹏多多11 分钟前
前端复制功能的高效解决方案:copy-to-clipboard详解
前端·javascript
AryaNimbus13 分钟前
你不知道的 Cursor系列(三):再也不用死记硬背 Linux 命令,终端 Cmd+K 来帮你!
前端·ai编程·cursor
uhakadotcom15 分钟前
Rollup 从0到1:TypeScript打包完全指南
前端·javascript·面试
Mintopia21 分钟前
实时语音转写 + AIGC:Web 端智能交互的技术链路
前端·javascript·aigc
2503_9284115623 分钟前
9.15 ES6-变量-常量-块级作用域-解构赋值-箭头函数
前端·javascript·es6
Pedantic24 分钟前
SwiftUI ShareLink – 显示分享表单的使用
前端