android共享首选项一键多值

android共享首选项一键多值,android,sharedpreferences,Android,Sharedpreferences,我的查询是直截了当的,在谷歌上找不到答案: 例如: 存储库1->username1 ->密码1 存储库2->username2 ->密码2 存储库3->username3 ->密码3 如上所述,我有一个包含三个存储库的对话框。当用户自动选择存储库时,会弹出另一个对话框,输入用户名和密码 所以,我试图实现的是用一个键将存储库名称、用户名和密码保存在共享首选项中 我知道如何使用单个键和值创建共享的pref对象。我要找的是一个共享的pref obj,只有一个键和3个值 真的有可能吗?如果是,您可以告诉

我的查询是直截了当的,在谷歌上找不到答案:

例如:

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

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

存储库3->username3 ->密码3

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

所以,我试图实现的是用一个键将存储库名称、用户名和密码保存在共享首选项中

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

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

您不能用一个键在同一个文件中存储三个值,至少不能在
SharedReferences
对象的抽象级别上存储


您可以做的是存储n3元组的JSON表示(我认为这是您所需要的)。换句话说,存储一个由s组成的字符串。这样,您就不必关心分隔符、转义和其他此类麻烦。

我将使用String对象的split方法。。。
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 "";
        }
    }