我对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);
答案 0 :(得分:2)
SharedPreferences是键/值数据存储。这意味着每个键只包含一个值。一个键不能有多个值。您也不能多次在首选项中使用相同的密钥,重复使用相同的密钥将导致旧值被覆盖。
您上面所做的实际上是为每个项目创建新密钥。这将是有效的,虽然它的奇怪和冗余使得键和它的值基本相同。问题在于,由于您没有预定义的密钥(生成密钥),因此找到所有密钥的唯一方法就是像您一样行走偏好。它真的不是如何使用共享偏好,不推荐使用。您应该使用不同的数据存储区。您应该使用的内容取决于它们的用途,但答案可能是数据库。
答案 1 :(得分:1)
首选项中的任何特定键只能有一(1)个字符串值。
如果您将多次保存键值 - 它将被最后一个值覆盖。
如果您多次读取键值,它将多次返回相同的值。
如果您需要保存多个值 -
有关详细信息,请参阅文档。