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

Android登录后将用户JSON数据存入Session并跨Activity访问

嘿,别困惑啦!咱们用SharedPreferences来实现Session管理就好,这是Android里最常用的轻量级本地存储方案,刚好满足你存用户数据、后续按需读取的需求。下面一步步来实现:

1. 先写一个Session管理工具类(SessionManager)

这个类封装了SharedPreferences的操作,负责保存、读取和清除用户会话数据:

import android.content.Context;
import android.content.SharedPreferences;
import org.json.JSONObject;

public class SessionManager {
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;
    private static final String PREF_NAME = "VendorSession";
    private static final String IS_LOGGED_IN = "isLoggedIn";

    // 定义用户数据的键名,和返回的JSON字段一一对应
    public static final String KEY_ID = "ID";
    public static final String KEY_FIRM_NAME = "FIRM_NAME";
    public static final String KEY_CONTACT_NO = "CONTACT_NO";
    public static final String KEY_FIRM_EMAIL = "FIRM_EMAIL";
    public static final String KEY_STATE = "STATE";
    // 可以把userdata里所有你需要的字段都照着这个格式列出来

    public SessionManager(Context context) {
        sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
    }

    // 保存用户会话数据
    public void saveUserSession(JSONObject userData) {
        try {
            editor.putBoolean(IS_LOGGED_IN, true);
            // 逐个取出JSON里的字段存进SharedPreferences
            editor.putString(KEY_ID, userData.getString(KEY_ID));
            editor.putString(KEY_FIRM_NAME, userData.getString(KEY_FIRM_NAME));
            editor.putString(KEY_CONTACT_NO, userData.getString(KEY_CONTACT_NO));
            editor.putString(KEY_FIRM_EMAIL, userData.getString(KEY_FIRM_EMAIL));
            editor.putString(KEY_STATE, userData.getString(KEY_STATE));
            // 把其他需要的字段都补充进来
            editor.apply();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 读取单个用户数据
    public String getUserDetail(String key) {
        return sharedPreferences.getString(key, null);
    }

    // 判断用户是否已登录
    public boolean isLoggedIn() {
        return sharedPreferences.getBoolean(IS_LOGGED_IN, false);
    }

    // 清除会话(登出)
    public void logout() {
        editor.clear();
        editor.apply();
    }
}
2. 修改LoginActivity的登录成功逻辑

在你现有的Login代码里,把登录成功返回的userdata存进Session:

首先,修正你的Session变量类型(原来的private Session session;改成private SessionManager sessionManager;),然后在onCreate方法里初始化:

sessionManager = new SessionManager(Login.this);

然后在onResponse的登录成功分支里,添加存储逻辑:

if (Integer.parseInt(jobject.getString("status")) == 200) {
    Toast.makeText(getApplicationContext(), "Login Success", Toast.LENGTH_LONG).show();
    
    // 解析返回的userdata并存储到Session
    JSONObject userData = jobject.getJSONObject("userdata");
    sessionManager.saveUserSession(userData);
    
    Intent i = new Intent(Login.this, MainActivity.class);
    startActivity(i);
    finish();
}
3. 在其他Activity中读取用户数据

比如在MainActivity里,你可以这样按需读取单个数据元素:

public class MainActivity extends AppCompatActivity {
    private SessionManager sessionManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        sessionManager = new SessionManager(MainActivity.this);
        
        // 先检查是否已登录,未登录就跳回登录页
        if (!sessionManager.isLoggedIn()) {
            Intent intent = new Intent(MainActivity.this, Login.class);
            startActivity(intent);
            finish();
            return;
        }
        
        // 按需读取数据,比如获取公司名称
        String firmName = sessionManager.getUserDetail(SessionManager.KEY_FIRM_NAME);
        // 获取联系电话
        String contactNo = sessionManager.getUserDetail(SessionManager.KEY_CONTACT_NO);
        // 获取所在省份
        String state = sessionManager.getUserDetail(SessionManager.KEY_STATE);
        
        // 接下来就可以把这些数据显示到UI上或者做其他业务处理了
    }
}
一些注意事项
  • 所有需要的userdata字段,都要在SessionManager里定义对应的KEY,并在saveUserSession方法里完成保存。
  • SharedPreferences是持久化存储的,除非用户清除App数据或者调用logout方法,数据会一直保留在本地。
  • 记得在需要登录才能访问的页面(比如MainActivity)先判断登录状态,防止未登录用户直接进入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:08:53