android共享首选项一个具有多个值的键

时间:2013-04-08 08:57:01

标签: android sharedpreferences

我的查询很直接,无法在谷歌找到答案:

例如:

存储库1 - > USERNAME1                - >密码1

存储库2 - > USERNAME2                - >密码2

存储库3 - > USERNAME3                - > password3

如上所述,我有一个包含三个存储库的对话框。当用户自动选择存储库时,会弹出另一个对话框以输入用户名和密码。

因此,我想要实现的是使用单个密钥在共享首选项中保存存储库名称,用户名和密码。

我知道如何使用单个键和值创建共享的pref对象。我正在寻找的是一个共享的pref obj,只有一个键和3个值。

真的有可能吗?如果是的话,你可以告诉我一些方向。

2 个答案:

答案 0 :(得分:0)

您不能在同一SharedPreferences文件中使用单个密钥存储三个值,至少不能在SharedPreferences对象的抽象级别上存储。

可以做的是存储n个3元组的JSON表示(我认为这就是你需要的)。换句话说,存储一个由JSONArray JSONObject s组成的字符串。这样,您无需关心分隔符,转义和其他此类烦恼。

答案 1 :(得分:0)

SharedPreferences prefs = getSharedPreferences(getPathForUser(username, password) + PREF_RESOURCES_NAME, MODE_PRIVATE);





public static String getPathForUser(String username, String password) {
        String sUsername = null;
        String sPassword = null;

        // sUsername
        if (username != null && username.trim().length() > 0) {
            sUsername = username.trim();
        } else {
            sUsername = "defaultUsername";
        }


        // sPassword
        if (password != null && password.trim().length() > 0) {
            sPassword = password.trim();
        } else {
            sPassword = "defaultPassword";
        }


        try {
            return URLEncoder.encode(sUsername, "UTF-8") + "__" + URLEncoder.encode(sPassword, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return "";
        }
    }