如何在strings.xml中存储用户名和密码详细信息

时间:2013-10-25 16:48:52

标签: android xml sqlite

我正在开发一个应用程序,它有一个登录页面。我需要存储登录凭据。它可以在我的strings.xml文件中吗?因为我听说在运行时无法修改Strings.xml。那么我在哪里可以存储数据,即用户详细信息或应用程序详细信息?

4 个答案:

答案 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方法,如果首选项没有引用getStringString方法将返回"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文件中,可以使用编辑器查看和修改。你应该至少加密它,或者更好的是,根本不保存它。通常,您登录到服务器或站点,然后仅保存返回令牌。您只能使用令牌再次连接,而不必以纯文本格式保存密码。