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

Android中如何将SharedPreferences值通过URL传递至API接口?

在Android中通过URL传递SharedPreferences存储的用户ID

1. 从SharedPreferences读取用户ID

先从SharedPreferences里取出之前保存的user_id,代码示例如下(可在Activity、Fragment或ViewModel中调用):

// 获取SharedPreferences实例,"user_prefs"是自定义的存储文件名
SharedPreferences prefs = getSharedPreferences("user_prefs", Context.MODE_PRIVATE);
// 读取user_id,第二个参数为默认值,未找到对应key时返回该值
String userId = prefs.getString("user_id", "");

2. 修改Retrofit接口定义

你当前的接口URL包含{user_id}占位符,但用@Field传递参数不符合URL路径参数的传递逻辑,需要改用@Path注解绑定URL中的占位符,修改后的接口如下:

@FormUrlEncoded
@POST("user.php/{user_id}")
Call<UpdateUserResponse> sentUserUpdateddata(
        @Path("user_id") String userId, // @Path对应URL里的{user_id}占位符
        @Field("first_name") String first_name,
        @Field("last_name") String last_name,
        @Field("email") String email,
        @Field("password") String password
        // 若后端不需要表单中再传user_id,删除原@Field("user_id")参数
);

@Path注解会把参数值直接替换到URL的占位符位置,比如userId为"1001",实际请求URL会变成user.php/1001。

3. 调用接口时传入读取到的user_id

初始化Retrofit和接口实例后,把从SharedPreferences读取到的userId传入接口方法即可:

// 假设已初始化好Retrofit实例
ApiService apiService = retrofit.create(ApiService.class);

// 读取user_id(可提前在合适位置读取,避免重复代码)
SharedPreferences prefs = getSharedPreferences("user_prefs", Context.MODE_PRIVATE);
String userId = prefs.getString("user_id", "");

// 调用接口,传入userId及其他参数
Call<UpdateUserResponse> call = apiService.sentUserUpdateddata(
        userId,
        "你的名字",
        "你的姓氏",
        "你的邮箱",
        "你的密码"
);

// 异步执行请求
call.enqueue(new Callback<UpdateUserResponse>() {
    @Override
    public void onResponse(Call<UpdateUserResponse> call, Response<UpdateUserResponse> response) {
        if (response.isSuccessful()) {
            // 请求成功,处理返回数据
        } else {
            // 请求返回错误,处理错误信息
        }
    }

    @Override
    public void onFailure(Call<UpdateUserResponse> call, Throwable t) {
        // 请求失败(如网络问题),处理异常
    }
});

注意事项

  • 确保SharedPreferences中已正确存储user_id,否则会传递空字符串,可能导致后端接口报错。调用接口前可判断userId是否为空,为空则提示用户先登录。
  • 若后端要求user_id为数字类型,可把接口中的String userId改为int userId或long userId,@Path参数类型同步修改即可。
  • 若后端同时需要URL路径参数和表单中的user_id,可保留原@Field("user_id") String user_id参数,否则建议删除以避免冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:25:20