Android中通过SOAP WebService跨Activity传递登录Session ID求助
解决Android中SOAP登录Session ID跨Activity传递的问题
Hey there! 作为刚接触Android和SOAP开发的新手,我完全懂你现在的困惑——好不容易通过WebService拿到了登录用户的Session ID,却不知道怎么把它传到另一个Activity里继续用。你提到的常量类思路是对的,我来一步步给你讲具体怎么实现,再结合你贴的代码帮你修改~
方案一:使用静态常量类(你提到的全局存储方式)
这种方式适合在整个应用中随时访问Session ID,实现起来非常简单:
1. 创建全局常量类
新建一个专门存储全局变量的Java类,比如AppConstants:
public class AppConstants { // 静态变量存储Session ID,初始值为空字符串 public static String USER_SESSION_ID = ""; }
2. 在登录成功后保存Session ID
回到你贴的loginAction()方法,取消注释获取Session ID的代码,把它赋值给常量类的静态变量:
try { // ... 省略SOAP请求、响应解析的原有代码 String message0 = result.getProperty(0).toString(); String message1 = result.getProperty(1).toString(); // 取消注释,获取WebService返回的Session ID String sessionId = result.getProperty(2).toString(); // 把Session ID保存到常量类中 AppConstants.USER_SESSION_ID = sessionId; switch (message0) { case "0": runOnUiThread(new Runnable() { public void run() { Intent i = new Intent(getApplicationContext(), NFCTagActivity.class); startActivity(i); } }); break; // ... 省略默认分支代码 } } catch (Exception e) { e.printStackTrace(); }
3. 在其他Activity中获取Session ID
比如在NFCTagActivity里,直接调用静态变量就能拿到:
// 在需要使用Session ID的地方获取 String currentSessionId = AppConstants.USER_SESSION_ID; // 后续发起SOAP请求时,把这个Session ID作为参数传入即可
方案二:通过Intent直接传递(适合一次性跳转传递)
如果只是在跳转到NFCTagActivity时需要传递Session ID,用Intent的putExtra方法更直接,不需要额外的类:
修改你跳转Activity的代码:
case "0": runOnUiThread(new Runnable() { public void run() { String sessionId = result.getProperty(2).toString(); Intent i = new Intent(getApplicationContext(), NFCTagActivity.class); // 把Session ID放到Intent中 i.putExtra("USER_SESSION_ID", sessionId); startActivity(i); } }); break;
然后在NFCTagActivity的onCreate方法中获取:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_nfc_tag); // 从Intent中取出Session ID,第二个参数是默认值(没找到时返回空字符串) String sessionId = getIntent().getStringExtra("USER_SESSION_ID", ""); // 后续使用即可 }
方案三:用SharedPreferences持久化保存(重启应用也能保留)
如果希望即使应用被系统回收或重启,Session ID还能保留,可以用SharedPreferences存储:
1. 登录成功后保存
String sessionId = result.getProperty(2).toString(); // 获取SharedPreferences实例,"AppPrefs"是自定义的文件名 SharedPreferences sp = getSharedPreferences("AppPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); // 存储Session ID editor.putString("USER_SESSION_ID", sessionId); editor.apply(); // 异步保存,也可以用commit()同步保存
2. 在其他Activity中获取
SharedPreferences sp = getSharedPreferences("AppPrefs", MODE_PRIVATE); // 获取Session ID,第二个参数是默认值 String sessionId = sp.getString("USER_SESSION_ID", "");
内容的提问来源于stack exchange,提问作者abdoulaye seck
相关产品推荐
相关产品推荐

