如何在 Android 中的 SharedPreferences 中给定键值获取值?

How to get values given the key value in a set in SharedPreferences in Android?

public void buttonClick(View v)
{
    EditText sd = (EditText)findViewById(R.id.sd);
    EditText desc = (EditText)findViewById(R.id.description);
    Spinner type = (Spinner)findViewById(R.id.type);
    Spinner priority = (Spinner)findViewById(R.id.priority);
    Set<String> set = new HashSet();

    if(!validate(sd))
        sd.setError("This field cannot be empty");
    else if(!validate(desc))
        desc.setError("This field cannot be empty");
    else
    {
        set.add(type.getSelectedItem().toString());
        set.add(priority.getSelectedItem().toString());
        set.add(desc.getText().toString());

        SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref",MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.putStringSet(sd.getText().toString(),set);
        editor.commit();
        Log.d("MyTag",pref.getAll().toString());

        Intent i = new Intent(this, MainActivity.class);
        startActivity(i);
    }
}

private boolean validate(EditText t1)
{
    if(t1.getText().length()==0)
        return false;
    else
        return true;
}

在上面的代码中,我使用 StringSet 将详细信息存储在 SharedPreferences 中。键是 sd 字符串,值是 desctype 和 `priority'。我创建了一个 Set 并将键和相应的值放入集合中。如何获取给定键的值?

方法 pref.getStringSet(key, Set<String>) 需要键和值。键值已知,但第二个参数应该放什么?已尝试 null 但它需要一种 Set。

pref.getStringSet(key, Set<String>) 中的第二个参数是默认值,以防以前从未设置过首选项。

勾选 documentation:

参数

  • key 要检索的首选项的名称。
  • defValues 如果此首选项不存在,则值为 return。

因此,如果已经设置,则先前分配的值是 returned。否则 defValues 是 returned.

您可以继续将 null 放在那里。以下编译并适用于我:

HashSet<String> hashSet = hashSet = (HashSet<String>) sp.getStringSet("names", null);

第二个值是默认值。如果 Lint 在您输入 null 时给您一个错误,只需告诉 Lint 忽略该错误即可。

第二个参数是默认值,如果您尝试获取的共享首选项不存在,或者您将错误的名称作为第一个参数,它将被设置为作为第二个参数传递的默认值。

键值是一个标签,您将使用它来获取特定的共享首选项,例如:

editor.putString("name_of_your_preference", value_of_preference);

然后您可以使用以下方法检索该字符串:

pref.getString("name_of_your_preference", default_value);

您只能使用 NULL 作为默认值