You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:44:55