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

如何使用存储在SharedPreferences中的Authorization Token发起请求获取用户资料

使用存储的Token发起用户资料请求

你的推测完全正确!要获取和用户账号关联的资料,确实需要在新请求中带上存储的Token(通常放在请求头里),下面我以Android开发场景为例,一步步拆解实现流程:

1. 从SharedPreferences中读取Token

首先要把登录时存在SharedPreferences里的Token取出来,记得用你存储时约定好的key:

// 获取SharedPreferences实例
val sharedPref = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE)
// 读取Token,这里的"USER_AUTH_TOKEN"是存储时用的key
val authToken = sharedPref.getString("USER_AUTH_TOKEN", null)

2. 构建带Token的请求头

绝大多数后端会要求把Token放在Authorization请求头中,格式一般是Bearer [你的Token](少数后端可能不需要Bearer前缀,具体以后端文档为准):

val requestHeaders = Headers.Builder()
    .add("Authorization", "Bearer $authToken")
    .add("Content-Type", "application/json") // 根据接口要求设置内容类型
    .build()

3. 发起请求(以Retrofit为例)

如果用Retrofit框架,可以这样定义接口并发起请求:

// 定义接口
interface UserApi {
    @GET("user/profile") // 替换成你的用户资料接口路径
    suspend fun getUserProfile(
        @Header("Authorization") authHeader: String
    ): Response<UserProfile>
}

// 初始化Retrofit并调用接口
val userApi = Retrofit.Builder()
    .baseUrl("https://your-api-domain.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(UserApi::class.java)

// 在协程中执行请求
lifecycleScope.launch {
    try {
        val response = userApi.getUserProfile("Bearer $authToken")
        if (response.isSuccessful) {
            val userProfile = response.body()
            // 拿到用户资料后更新UI展示
        } else {
            // 处理请求失败,比如Token过期、权限不足
            if (response.code() == 401) {
                // 清除本地Token,跳回登录页
                sharedPref.edit().remove("USER_AUTH_TOKEN").apply()
                startActivity(Intent(this@YourActivity, LoginActivity::class.java))
            }
        }
    } catch (e: Exception) {
        // 处理网络异常,比如无网络、连接超时
    }
}

如果不用Retrofit,用原生HttpURLConnection也能实现:

val url = URL("https://your-api-domain.com/user/profile")
val connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET" // 多数资料接口用GET,具体看后端要求
connection.setRequestProperty("Authorization", "Bearer $authToken")
connection.setRequestProperty("Content-Type", "application/json")

// 读取响应内容
val inputStream = connection.inputStream
val response = inputStream.bufferedReader().use { it.readText() }

4. 解析响应数据

拿到接口返回的JSON后,用Gson或Moshi等工具解析成实体类:

// 定义用户资料实体类
data class UserProfile(
    val userId: String,
    val username: String,
    val email: String,
    val avatarUrl: String
)

// 用Gson解析
val gson = Gson()
val userProfile = gson.fromJson(response, UserProfile::class.java)

关键注意事项

  • 先判断Token是否为空,如果为空直接跳转到登录界面
  • 处理Token过期:如果接口返回401状态码,要清除本地Token并引导用户重新登录
  • 确认请求方法和后端一致:部分资料接口可能用POST,但绝大多数是GET,以后端文档为准

内容的提问来源于stack exchange,提问作者MHDixon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:41