Android中的Shared Preferences是什么?

4
我是一名初学Android开发的程序员,正在努力构建一个登录屏幕。
我需要找到一种最简单的方法将用户名和密码存储在一个类中,并从另一个类中检索它们。谷歌提供了多种存储方式:http://developer.android.com/guide/topics/data/data-storage.html
哪一种方式最高效并且编码最容易呢?
谢谢!
5个回答

4

对于登录界面任务,例如存储用户名和密码,您可以使用Shared Preferences。我这里制作了用于使用shared preferences的自定义方法。调用savePreferences()方法并放置您的Key和Value(因为savePreferences()基于XML),类似地使用您的Key调用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;
}

对不起,(TelaSketchStaticData.PREF_NAME, MODE_PRIVATE)是什么? - Hendra Anggrian
大多数是关于TelaSketchStaticData的,它是什么? - Hendra Anggrian
@Anggrian 这只是一个偏好设置文件名。您可以为偏好设置文件指定任何名称,例如 getSharedPreferences(<PREFRENCE_FILE_NAME>, MODE_PRIVATE)。 - Akhilesh Mani

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

3

对于您的目的,SQLite数据库和SharedPreferences都可以使用。但是我建议使用SharedPreferences,因为它们非常易于使用。一些人喜欢创建一个类来保存这样的变量,但是使用SQLite和SharedPreferences文件的好处是,即使应用程序进入后台并被销毁,用户登录名和密码信息也将与您保持一致。因此,当用户回到您的应用程序时,您可以再次登录他们而不需要请求密码。如果用户明确决定注销,则可以从共享首选项文件中简单地删除登录信息。


1
从其他活动中检索登录信息的最简单方法是使用“SharedPreferences”。我强烈推荐使用此方法来存储和检索用户名和密码。因为您可以在应用程序中的任何地方访问此信息,而不会出现任何复杂情况。登录信息可能需要在应用程序中重复使用。

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数据存储帖子。

有关更多信息,请查看此链接:

在Android中使数据持久化


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