Android共享首选项加载问题

时间:2014-04-21 18:36:26

标签: java android persistence sharedpreferences

我目前正在尝试实施SharedPreferences来保存和加载ArrayList个对象。我有一个按钮设置为saveFood(),另一个按钮调用loadFood()

public void saveFood(View view) {

    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
    text = (TextView)(findViewById(R.id.feedback));

    editor.putInt("size", foodList.size());
    for (int y=0; y<foodList.size(); y++){
        editor.putInt(Integer.toString(y), foodList.get(y).getItemIdInt());
        editor.putString(Integer.toString(y)+"a", foodList.get(y).getItemName());
        editor.putInt(Integer.toString(y)+"b", foodList.get(y).getTime());
    }

    text.setText("saved");
}

public void loadFood(View view){

    int idNum = 0;
    int time = 0;
    int size = 0;
    String itemName;

    text = (TextView)(findViewById(R.id.feedback));

    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    size = prefs.getInt("size", -1);

    if(size != -1){
        for (int x=0; x<size; x++){
            idNum = prefs.getInt(Integer.toString(x), -1);
            itemName = prefs.getString(Integer.toString(x)+"a", null);
            time = prefs.getInt(Integer.toString(x)+"a", -1);

            ObjectItem newFood = new ObjectItem(idNum, itemName, time);
            foodList.add(newFood);
        }

        text.setText("load successful");
    }
    else text.setText("error");


}

当程序运行并单击“保存”按钮时,保存的消息将按预期显示。但是,每次单击加载按钮时,我都会收到错误反馈(由于某种原因,getInt返回-1)。

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您永远不会将更改提交给SharedPreferences。试试这个:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
text = (TextView)(findViewById(R.id.feedback));

editor.putInt("size", foodList.size());
for (int y=0; y<foodList.size(); y++){
    editor.putInt(Integer.toString(y), foodList.get(y).getItemIdInt());
    editor.putString(Integer.toString(y)+"a", foodList.get(y).getItemName());
    editor.putInt(Integer.toString(y)+"b", foodList.get(y).getTime());
}

editor.commit(); // Save the changes