我正在开发一个应用程序,它有一个登录页面。我需要存储登录凭据。它可以在我的strings.xml文件中吗?因为我听说在运行时无法修改Strings.xml
。那么我在哪里可以存储数据,即用户详细信息或应用程序详细信息?
答案 0 :(得分:3)
您可以将登录信息存储在 SharedPreference 或 SqliteDatabase 中。
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", YOUR_USERNAME);
editor.putString("password", YOUR_PASSWORD);
editor.commit();
用于检索登录信息
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String username = prefs.getString("username", null);
String password = prefs.getString("password", null);
如果您需要更高的安全性,可以使用 SqliteDatabase
SQLCipher请浏览this链接。
答案 1 :(得分:1)
使用共享偏好设置。像这样:
创建这些方法以供使用,或者只是在需要时使用方法内部的内容:
public String getUserName()
{
SharedPreferences sp = getSharedPreferences("userNameAndPassword", 0);
String str = sp.getString("userName","no userName created");
return str;
}
public String getPassword()
{
SharedPreferences sp = getSharedPreferences("userNameAndPassword", 0);
String str = sp.getString("password","no password created");
return str;
}
public void writeToUserNameAndPassword(String userName, String password)
{
SharedPreferences.Editor pref =
getSharedPreferences("userNameAndPassword",0).edit();
pref.putString("userName", userName);
pref.putString("password", password);
pref.commit();
}
您可以这样称呼它们:
// their userName if "foo" and their password is "bar"
writeToUserNameAndPassword("foo", "bar");
if (getUserName().equals(inputUserName) && getPassword.equals(inputPassword))
{
// they have the right userName and password
}
else if (getUserName().equals("no userName created")
&& getPassword().equals("no password created"))
{
// these preference Strings for their userName/password have both not been created
}
else if (getUserName().equals("no userName created"))
{
// this preference String for their userName has not been created,
// but the password has been
}
else if (getPassword().equals("no password created"))
{
// this preference String for their password has not been created,
// but the userName has been
}
else
{
// they entered the wrong userName and/or password
}
一些解释(如果需要):
"password"
和"userName"
是首选项中的“关键字”Strings
。所以你引用这些键来获得你放在那里的String
。它是您放置的String
的参考名称。
"userNameAndPassword"
是首选项名称。您可以使用首选项名称“userNameAndPassword”来引用您要访问的首选项。
"no password created"
和"no userName created"
是Strings
方法,如果首选项没有引用getString
,String
方法将返回"password"
}或"userName"
,意味着它尚未创建。
另一种说法:它们是引用String
的默认值。因此,如果没有任何内容,则该方法将返回默认值。您必须设置默认值。
因此,例如,如果没有将“密码”String
放入"userNameAndPassword"
首选项(写入使用putString
),那么getPassword()
方法将返回"no password created"
。
答案 2 :(得分:0)
简单来说,您无法存储或更改 strings.xml的内容
但是,因为用户@amit说你可以 将这些值存储在共享首选项
中或者您可以使用 SQLite数据库来存储您想要的内容learn sqlite
例如
SharedPreferences.Editor prefEditor = getPreferences(MODE_PRIVATE).edit();
prefEditor.putInt(LAUNCH_COUNT, 1); // you can have multiple put (values)
prefEditor.commit();
prefEditor.apply();
SharedPreferences sp = getPreferences(MODE_PRIVATE);
int launchCount = sp.getInt(LAUNCH_COUNT, -1);
答案 3 :(得分:0)
正如@Armit之前提到的,您可以将数据存储在SharedPreferences中。请注意,它存储在一个简单的XML文件中,可以使用编辑器查看和修改。你应该至少加密它,或者更好的是,根本不保存它。通常,您登录到服务器或站点,然后仅保存返回令牌。您只能使用令牌再次连接,而不必以纯文本格式保存密码。