我的应用程序中有一个登录功能。我想知道设置全局会话或等效会话的最佳方法,以便我可以从任何活动中引用它们,以便它们知道用户是否已登录。此外,其他活动可以获取用户ID以进行数据库事务。
我不想使用putExtra(),因为我将不得不在应用程序中构建的每个Intent中都这样做。
public class SampleApplication extends Application {
private static String username;
private static String password;
@Override
public void onCreate() {
super.onCreate();
username="";
password="";
}
public static String getUsername() {
return username;
}
public static void setUsername(String username) {
SampleApplication.username = username;
}
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
SampleApplication.password = password;
}
}
在声明静态方法和变量后,您应该在AndroidManifest.xml中定义应用程序类。使用application
标记的android:name
属性来定义您的类名。
下面是一些示例代码:
<application
android:name=".SampleApplication"
android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SampleApp"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
你的应用程序类将共享所有Activity的生命周期事件,并在应用程序退出时被销毁。
您可以从任何活动或服务中使用静态getter和setter访问您的应用程序变量:
SampleApplication.setUsername("");
String currentUserName=SampleApplication.getUsername();
SampleApplication.setPassword("");
String currentPassword=SampleApplication.getPassword();
你也可以选择普通的Application类,而不是使用单例类
同样示例的另一种选择:
public class SampleApplication extends Application {
private String username;
private String password;
@Override
public void onCreate() {
super.onCreate();
username="";
password="";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
SampleApplication.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
SampleApplication.password = password;
}
}
您可以使用以下方式访问这些内容:
((SampleApplication)getApplication()).getUsername();