Android中的共享首选项?

时间:2012-09-28 12:19:20

标签: android login sharedpreferences

我是一名新手Android开发人员,目前正在努力构建登录屏幕。

我需要找到在1个类中存储用户名和密码的最简单方法,并从另一个类中检索它。请参阅Google提供的几种方式:http://developer.android.com/guide/topics/data/data-storage.html

哪一个最有效且易于编码?

谢谢!

5 个答案:

答案 0 :(得分:4)

对于存储用户名和密码等登录屏幕任务,您可以使用共享首选项。在这里,我制作了使用共享首选项的自定义方法。调用savePreferences()方法并输入您的密钥和值(因为savePreferences()基于XML),类似地使用您的密钥调用Load。最后不要忘记在LOGOUT上调用deletePreferences()

/**
 *   Method used to get Shared Preferences */

public SharedPreferences getPreferences() 
{
    return getSharedPreferences(<PREFRENCE_FILE_NAME>, MODE_PRIVATE);
}
/**
 *  Method used to save Preferences */
public void savePreferences(String key, String value) 
{
    SharedPreferences sharedPreferences = getPreferences();
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}
/**
 *  Method used to load Preferences */
public String loadPreferences(String key) 
{
    try {
        SharedPreferences sharedPreferences = getPreferences();
        String strSavedMemo = sharedPreferences.getString(key, "");
        return strSavedMemo;
    } catch (NullPointerException nullPointerException) 
    {
        Log.e("Error caused at  TelaSketchUtin loadPreferences method",
                ">======>" + nullPointerException);
        return null;
    }
}
/**
 *  Method used to delete Preferences */
public boolean deletePreferences(String key)
{
    SharedPreferences.Editor editor=getPreferences().edit();
    editor.remove(key).commit();
    return false;
}

希望这对你有所帮助。别忘了做+1。

答案 1 :(得分:4)

定义一些静态以存储首选项文件名和您将要使用的键:

public static final String PREFS_NAME = "MyPrefsFile";
private static final String PREF_USERNAME = "username";
private static final String PREF_PASSWORD = "password";

然后您将保存用户名和密码,如下所示:

getSharedPreferences(PREFS_NAME,MODE_PRIVATE)
.edit()
.putString(PREF_USERNAME, username)
.putString(PREF_PASSWORD, password)
.commit();

所以你会像这样检索它们:

SharedPreferences pref = getSharedPreferences(PREFS_NAME,MODE_PRIVATE);   
String username = pref.getString(PREF_USERNAME, null);
String password = pref.getString(PREF_PASSWORD, null);

if (username == null || password == null) {

//Prompt for username and password
}

或者,如果您不想命名首选项文件,则可以使用默认值:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);

答案 2 :(得分:3)

为了您的目的,SQLite数据库和SharedPreferences都可以使用。但我建议使用SharedPreferences,因为它们非常容易使用。有些ppl喜欢创建一个类来保存这样的变量,但SQLite和SharedPreferences文件的好处是,即使应用程序进入后台并被销毁,用户登录名和密码信息也会随身携带。因此,当用户返回您的应用程序时,您可以再次登录,而无需输入密码。如果用户明确决定注销,您只需从共享首选项文件中删除登录信息

答案 3 :(得分:1)

从其他活动中检索登录信息的最简单方法是使用“SharedPreferences”。我强烈建议使用此方法来存储和检索用户名和密码。因为您可以从应用程序的任何位置访问此信息而不会出现任何问题。登录信息可能必须在应用程序中重复使用。

答案 4 :(得分:0)

许多应用程序可能提供一种捕获用户对特定应用程序或活动设置的首选项的方法。为了支持这一点,Android提供了一组简单的API。

首选项通常是名称值对。它们可以作为“共享首选项”存储在应用程序中的各种活动中(注意,它不能跨进程共享)。或者它可能是需要存储特定于活动的东西。

共享首选项:共享首选项可供应用程序中的所有组件(活动,服务等)使用。

活动处理首选项:这些首选项只能在活动中使用,不能被应用程序的其他组件使用。

共享偏好设置:

共享首选项是在Context类的getSharedPreferences方法的帮助下管理的。首选项存储在默认文件(1)中,或者您可以指定用于引用首选项的文件名(2)。

(1)以下是指定文件名

时获取实例的方法
  public static final String PREF_FILE_NAME = "PrefFile";
  SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE是首选项的操作模式。它是默认模式,表示只有调用的应用程序才能访问创建的文件。支持的其他两种模式是MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。在MODE_WORLD_READABLE中,其他应用程序可以读取创建的文件但不能修改它。在MODE_WORLD_WRITEABLE的情况下,其他应用程序也对创建的文件具有写权限。

(2)建议的方法是使用默认模式,而不指定文件名:

  SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

最后,一旦有了首选项实例,以下是如何从首选项中检索存储的值:

   int storedPreference = preferences.getInt("storedInt", 0);

要在首选项文件中存储值,必须使用SharedPreference.Editor对象。 Editor是SharedPreference类的嵌套接口。

   SharedPreferences.Editor editor = preferences.edit();
   editor.putInt("storedInt", storedPreference); // value to store
   editor.commit();

编辑器还支持remove()和clear()等方法从文件中删除首选项值。

活动首选项:

共享首选项可供其他应用程序组件使用。但是,如果您不需要与其他组件共享首选项,并希望拥有私人首选项活动。您可以在活动的getPreferences()方法的帮助下完成此操作。 getPreference方法使用getSharedPreferences()方法和首选项文件名的活动类名称。

以下是获取偏好的代码:

   SharedPreferences preferences = getPreferences(MODE_PRIVATE);
   int storedPreference = preferences.getInt("storedInt", 0);

存储值的代码也与共享首选项的代码相同。

   SharedPreferences preferences = getPreference(MODE_PRIVATE);
   SharedPreferences.Editor editor = preferences.edit();
   editor.putInt("storedInt", storedPreference); // value to store
   editor.commit();

您还可以使用其他方法,例如在数据库中存储活动状态。注意Android还包含一个名为android.preference的包。该包定义了用于实现应用程序首选项UI的类。

要查看更多示例,请查看开发人员网站上的Android数据存储帖子。

有关详细信息,请查看以下链接:

Making data persistent in android