我有一个场景,在通过登录页面登录后,每个 "活动 "上都有一个退出的 "按钮"。
在点击 "退出 "时,我将把已登录用户的 "会话ID "传递给退出。谁能指导我如何让所有的 "活动 "都能使用 "会话ID"?
对这种情况有什么替代方法吗?
最简单的方法是在你用来启动活动的 "Intent "中把会话ID传递给签出活动。
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
在下一个活动中访问该意图。
String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
意图的docs中有更多信息(请看 "额外 "一节)。
正如Erich指出的那样,传递Intent外在的东西是一个好的方法。
不过Application对象是另一种方法,在处理多个活动中的相同状态时(相对于必须到处获取/放置它),或比基元和字符串更复杂的对象时,它有时更容易。
你可以扩展Application,然后在那里设置/获取你想要的东西,并通过getApplication()从任何活动(在同一个应用程序中)访问它。
还要记住,你可能看到的其他方法,比如静态,可能会有问题,因为它们可能导致内存泄漏。应用程序也有助于解决这个问题。
尝试做以下工作。
创建一个简单的 "助手 "类(为你的Intents提供工厂),像这样。
import android.content.Intent;
public class IntentHelper {
public static final Intent createYourSpecialIntent(Intent src) {
return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
}
}
这将是你所有Intent的工厂。每次你需要一个新的Intent时,就在IntentHelper中创建一个静态工厂方法。要创建一个新的Intent,你应该像这样说。
IntentHelper.createYourSpecialIntent(getIntent());
在你的活动中。当你想在一个 "会话 "中 "保存 "一些数据时,只需使用以下方法。
IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);
然后发送这个意图。在目标活动中,你的字段将以下列方式出现。
getIntent().getStringExtra("YOUR_FIELD_NAME");
所以现在我们可以像以前的会话一样使用Intent(就像在servlets或JSP中)。