我需要找到一种最简单的方法将用户名和密码存储在一个类中,并从另一个类中检索它们。谷歌提供了多种存储方式:http://developer.android.com/guide/topics/data/data-storage.html。
哪一种方式最高效并且编码最容易呢?
谢谢!
对于登录界面任务,例如存储用户名和密码,您可以使用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;
}
定义一些静态变量来存储偏好文件名和你将要使用的键:
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);
对于您的目的,SQLite数据库和SharedPreferences都可以使用。但是我建议使用SharedPreferences,因为它们非常易于使用。一些人喜欢创建一个类来保存这样的变量,但是使用SQLite和SharedPreferences文件的好处是,即使应用程序进入后台并被销毁,用户登录名和密码信息也将与您保持一致。因此,当用户回到您的应用程序时,您可以再次登录他们而不需要请求密码。如果用户明确决定注销,则可以从共享首选项文件中简单地删除登录信息。
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数据存储帖子。
有关更多信息,请查看此链接: