登录会话 - 活动

7

我的应用程序中有一个登录功能。我想知道设置全局会话或等效会话的最佳方法,以便我可以从任何活动中引用它们,以便它们知道用户是否已登录。此外,其他活动可以获取用户ID以进行数据库事务。

我不想使用putExtra(),因为我将不得不在应用程序中构建的每个Intent中都这样做。

1个回答

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中定义应用程序类。使用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();

我现在在我的清单文件中有两个应用程序..这样可以吗?http://pastebin.com/N8CGmFkt - Harsha M V
不,肯定行不通。你不能创建两个启动器和两个应用程序。我已经在你的Pastebin中发布了编辑后的代码。 - Shardul
当您编辑Pastebin时,它会给出一个新的URL:(我无法看到您的编辑)。 - Harsha M V
非常抱歉:(我不知道pastebin的这种行为,你已经标记了我的答案为接受。它起作用了吗? - Shardul
7
为什么不直接创建一个包含所需变量、getter/setter方法的单例呢?在这种情况下,Activity 是没有意义的。 - Dayerman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接