Android SharedPreferences获取具有相同密钥的所有字符串?

时间:2014-12-13 21:31:28

标签: java android sharedpreferences

我对android和java编程相当新,我需要帮助使用相同的密钥获取所有数据,以便我可以在列表视图中显示它。 (无论密钥是什么,它现在都获得所有值)

以下是我将数据添加到SharedPreferences的代码:

public void onClick(View v) {
// TODO Auto-generated method stub              
String checkListStringData = etItemName.getText().toString();
checkListData = getSharedPreferences(filename,0);
SharedPreferences.Editor checkListEditor = checkListData.edit();
checkListEditor.putString(checkListStringData + "ItemName",checkListStringData);
checkListEditor.commit();

String checkListDataReturned = checkListData.getString(currentList + "ItemName", "");
tvTitle.setText(checkListDataReturned);

updateListView();
etItemName.setText("");
};
});
}

这是加载SharedPreferences的代码:

private void updateListView() {
    final ListView lvCheckList = (ListView) findViewById(R.id.lvCheckList);
    Map<String,?> keys = checkListData.getAll();

    ArrayList<String> checkListStrings = new ArrayList<String>();
    for(Map.Entry<String,?> entry : keys.entrySet()){
        if (entry.getValue() instanceof String) {
            checkListStrings.add((String) entry.getValue());
        }

    ArrayAdapter<String> checkListArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_1, checkListStrings );

    lvCheckList.setAdapter(checkListArrayAdapter); 

2 个答案:

答案 0 :(得分:2)

SharedPreferences是键/值数据存储。这意味着每个键只包含一个值。一个键不能有多个值。您也不能多次在首选项中使用相同的密钥,重复使用相同的密钥将导致旧值被覆盖。

您上面所做的实际上是为每个项目创建新密钥。这将是有效的,虽然它的奇怪和冗余使得键和它的值基本相同。问题在于,由于您没有预定义的密钥(生成密钥),因此找到所有密钥的唯一方法就是像您一样行走偏好。它真的不是如何使用共享偏好,不推荐使用。您应该使用不同的数据存储区。您应该使用的内容取决于它们的用途,但答案可能是数据库。

答案 1 :(得分:1)

首选项中的任何特定键只能有一(1)个字符串值。

如果您将多次保存键值 - 它将被最后一个值覆盖。

如果您多次读取键值,它将多次返回相同的值。

如果您需要保存多个值 -

  • 使用SQLite数据库
  • 将值组合到JSON数组中,并将其保存在prefs中

有关详细信息,请参阅文档。