我在我的应用程序中登录。我想知道设置可以从任何活动引用的全局会话或等效的最佳方法,以便他们知道用户是否已登录。此外,以便其他活动可以获取用户id来执行数据库事务。
我不想使用putExtra(),因为我必须为我在整个应用程序中构建的每个Intent都这样做。
答案 0 :(得分:13)
您可以创建一个可以用作全局州持有者的Application类。
以下是一些示例代码:
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中定义应用程序类。使用android:name
标记的application
属性来定义您的班级名称。
以下是一些示例代码:
<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();
您也可以选择普通的应用程序类
,而不是选择单例类替代同一个例子:
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();