如何在Android Studio中调用API实现登录注册并传递Token到请求头
在Android Studio中调用API时如何在请求头中传递Token?
我有如下JSON数据:
{ "data": { "id": x, "username": "xx", "name": "xx", "email": "xxxx@xxx.xxx", "gender": "xxx", "place": "xxxxx", "date": "xx/xx/xxxx", "religion": "xxxxx", "address": "xxxx", "telp": "xxxxxxx", "photo": null }, "meta": { "token": "xxxxxxxxxxxxxxxxxx" } }我想要在Android Studio中调用该API实现登录与注册功能,请问如何像在Postman中那样将Token传递到请求头中?谢谢。
没问题,我来帮你搞定这个事儿!在Android里给API请求加Token头,和你在Postman里手动添加请求头的逻辑完全一致,只是换成代码实现而已。下面分两种Android开发中最常用的方式来讲解:
方法一:用Retrofit(推荐,绝大多数Android项目的首选)
Retrofit是基于OkHttp封装的RESTful框架,处理请求头非常灵活,尤其是动态Token的场景(比如你登录后拿到的这个Token)。
1. 全局统一添加Token(最实用,一次配置所有请求自动带Token)
这个方式适合登录后所有需要鉴权的请求都要带Token的情况,我们可以用Interceptor拦截器来统一处理:
第一步:写一个鉴权拦截器
class AuthInterceptor(private val authToken: String) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { // 拿到原始请求 val originalRequest = chain.request() // 构建新的请求,给它加上Token请求头 val authenticatedRequest = originalRequest.newBuilder() // 注意:这里的格式要和后端要求一致!比如很多API用"Bearer + 空格 + Token" .header("Authorization", "Bearer $authToken") .build() // 继续执行请求 return chain.proceed(authenticatedRequest) } }
第二步:配置Retrofit时把拦截器加进去
假设你已经从登录接口拿到了Token(比如val token = loginResponse.meta.token),然后配置Retrofit:
// 先构建带拦截器的OkHttpClient val okHttpClient = OkHttpClient.Builder() .addInterceptor(AuthInterceptor(token)) .build() // 再构建Retrofit实例 val retrofit = Retrofit.Builder() .baseUrl("https://你的API基础地址.com/") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) // 用来解析JSON .build() // 创建API接口实例 val apiService = retrofit.create(YourApiInterface::class.java)
这样一来,所有通过这个apiService发起的请求,都会自动带上Token请求头,和你在Postman里手动添加Authorization头的效果一模一样。
2. 单个请求单独加Token
如果只有某几个特定请求需要带Token,也可以在API接口方法里用@Header注解,调用时传入Token:
interface YourApiInterface { // 比如获取用户信息的接口,需要传Token @GET("user/profile") suspend fun getUserProfile(@Header("Authorization") token: String): Response<UserProfileResponse> } // 调用的时候传入Token: apiService.getUserProfile("Bearer $token")
3. 固定Token的场景(不常用,适合测试)
如果Token是固定不变的,也可以直接在接口方法上用@Headers注解硬编码:
interface YourApiInterface { @Headers("Authorization: Bearer xxxxxxxxxxxxxxxxxx") @GET("user/profile") suspend fun getUserProfile(): Response<UserProfileResponse> }
方法二:直接用OkHttp(不依赖Retrofit)
如果你的项目没用到Retrofit,直接用OkHttp的话,也可以手动给Request添加请求头:
val token = "xxxxxxxxxxxxxxxxxx" val okHttpClient = OkHttpClient() // 构建请求时添加Token头 val request = Request.Builder() .url("https://你的API地址.com/user/profile") .addHeader("Authorization", "Bearer $token") .build() // 发起异步请求 okHttpClient.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { // 处理请求失败的情况 } override fun onResponse(call: Call, response: Response) { // 处理响应数据 val responseBody = response.body?.string() } })
几个关键注意事项
- Token格式要对:一定要和后端API要求的格式一致!比如有的是
Bearer <token>,有的是直接传Token,还有的可能用Token <token>,格式错了会直接返回401未授权。 - Token要持久化:登录成功后,记得把Token保存起来(比如用SharedPreferences、DataStore或者Room),下次启动App时直接读取,不用重新登录。
- 处理Token过期:如果Token有有效期,要在拦截器里判断响应码(比如401),然后发起刷新Token的请求,再重试原请求,提升用户体验。
内容的提问来源于stack exchange,提问作者Fikri Fadillah
相关产品推荐
相关产品推荐

