如何使用存储在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
相关产品推荐
相关产品推荐

