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
字符串,值为desc
,type
和“优先级”。我创建了一个Set并将键和相应的值放在集合中。如何获取给定键的值?
方法pref.getStringSet(key, Set<String>)
需要键和值。关键值是已知的,但应该在第二个参数中放入什么?尝试null
,但它需要一种类型的Set。
答案 0 :(得分:2)
pref.getStringSet(key, Set<String>)
中的第二个参数是以前从未设置过首选项的默认值。
参数
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用作默认值