如何在Android中的SharedPreferences中的集合中获取键值?

时间:2015-04-18 16:47:29

标签: android sharedpreferences

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和“优先级”。我创建了一个Set并将键和相应的值放在集合中。如何获取给定键的值?

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

3 个答案:

答案 0 :(得分:2)

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

检查documentation

参数

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

因此,如果已经设置,则返回先前分配的值。否则返回defValues

答案 1 :(得分:1)

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

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

第二个值是默认值。如果Lint在您null时出现错误,请告诉Lint忽略该错误。

答案 2 :(得分:0)

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

键值是您将用于获取特定共享首选项的标签,例如:

editor.putString("name_of_your_preference", value_of_preference);

然后您可以使用以下命令检索该字符串:

pref.getString("name_of_your_preference", default_value);

您只能将NULL用作默认值