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

Android多Activity跳转时如何从登录页A传递session token到C页面

问题原因

你之前的代码无法获取到token的核心原因是:C Activity的Intent是由B Activity启动时创建的,如果你没有把A中拿到的token逐层传递给B、再由B传递给C,C的Intent中不会携带对应的Extra字段,自然读取不到值。

可行实现方案

方案1:逐层Intent传参(符合Android官方组件通信规范,适合临时数据传递)

  • 步骤1:A(登录页)拿到session token后,启动B时将token存入Intent
// 定义全局统一的Extra key,避免拼写错误
public static final String EXTRA_SESSION_TOKEN = "session_token";

// A中启动B的代码
Intent intent = new Intent(LoginActivity.this, HomeActivity.class);
intent.putExtra(EXTRA_SESSION_TOKEN, 你从API获取到的sessionToken);
startActivity(intent);
  • 步骤2:B(首页)启动时先接收token,启动C时再传递给C
// B中定义成员变量存储token
private String mSessionToken;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 接收A传递的token
    mSessionToken = getIntent().getStringExtra(EXTRA_SESSION_TOKEN);
}

// B中点击CardView启动C的代码
Intent intent = new Intent(HomeActivity.this, BusinessActivity.class);
intent.putExtra(EXTRA_SESSION_TOKEN, mSessionToken);
startActivity(intent);
  • 步骤3:C中直接读取Intent中的token即可
String sessionToken = getIntent().getStringExtra(EXTRA_SESSION_TOKEN);

方案2:SharedPreferences持久化存储(适合登录凭证这类全局高频使用的数据)

登录态token本身属于需要跨页面、甚至重启APP后仍需保留的全局数据,优先推荐用这个方案,不需要逐层传递参数:

  • 步骤1:A拿到token后存入SharedPreferences
SharedPreferences sp = getSharedPreferences("app_config", MODE_PRIVATE);
sp.edit().putString("session_token", 你从API获取到的sessionToken).apply();
  • 步骤2:任意页面(包括B、C)需要使用时直接读取
SharedPreferences sp = getSharedPreferences("app_config", MODE_PRIVATE);
// 第二个参数为读取不到时的默认值
String sessionToken = sp.getString("session_token", "");
// 读取为空时说明未登录,可跳转回登录页A

方案3:全局单例类存储(适合APP运行期间临时存储全局公共数据)

// 自定义全局数据单例类
public class AppDataHolder {
    private static AppDataHolder INSTANCE;
    public String sessionToken;

    private AppDataHolder() {}

    public static AppDataHolder getInstance() {
        if (INSTANCE == null) {
            synchronized (AppDataHolder.class) {
                if (INSTANCE == null) {
                    INSTANCE = new AppDataHolder();
                }
            }
        }
        return INSTANCE;
    }
}

// A中拿到token后赋值
AppDataHolder.getInstance().sessionToken = 你从API获取到的sessionToken;

// C中直接读取
String sessionToken = AppDataHolder.getInstance().sessionToken;

注意:该方案存在缺陷,APP进程被系统后台杀死后重启时,单例存储的值会为空,使用前必须做判空处理,为空时跳转回登录页。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:03