登录会话 - 活动

Har*_*M V 7 session android

我在我的申请中登录了.我想知道设置可以从任何活动引用的全局会话或等效的最佳方法,以便他们知道用户是否已登录.此外,以便其他活动可以获取用户id来执行数据库事务.

我不想使用putExtra(),因为我必须为我在整个应用程序中构建的每个Intent都这样做.

Sha*_*dul 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

在声明静态方法和变量之后,您应该在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>
Run Code Online (Sandbox Code Playgroud)

您的应用程序类将以Activity的形式共享所有生命周期事件,并在应用程序退出时被销毁.

您可以使用任何活动或服务中的静态getter和setter访问您的应用程序变量:

SampleApplication.setUsername("");
String currentUserName=SampleApplication.getUsername();
SampleApplication.setPassword("");
String currentPassword=SampleApplication.getPassword();
Run Code Online (Sandbox Code Playgroud)

您也可以选择正常的Application类,而不是单独使用singleton类

替代相同的示例:

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以访问以下内容:

((SampleApplication)getApplication()).getUsername();
Run Code Online (Sandbox Code Playgroud)

  • 为什么你不用你需要的变量和getter/setter创建一个单例?在这种情况下,活动毫无意义. (7认同)