1

我试图使用 Save/Load Preferences 通过 EditView 保存用户的输入。但是,我当前的代码只保存用户输入的最后一个字符串。因此,当我重新进入应用程序时,ListView 中唯一的字符串是用户输入的最后一个字符串。

我怎样才能解决这个问题?

编辑代码如下:

addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String task = display.getText().toString();


                adapter.add(task);
                adapter.notifyDataSetChanged();

                JSONArray array = new JSONArray();
                array.add(task);


                SavePreferences("LISTS", array.toString());
        }
    });
}

protected void SavePreferences(String key, String value) {
    // TODO Auto-generated method stub
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = data.edit();
    editor.putString("LISTS", value);
    editor.commit();


}

protected void LoadPreferences(){
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    String dataSet = data.getString("LISTS", "");


    adapter.add(dataSet);
    adapter.notifyDataSetChanged();

    ArrayList<String> dataSetarrlist = new ArrayList<String>();
    dataSetarrlist.add(dataSet);
    adapter = new ArrayAdapter<String>(this, 
                         android.R.layout.simple_list_item_multiple_choice,dataSetarrlist);
    lv.setAdapter(adapter);
4

2 回答 2

0

你的问题是你写在同一个键“LISTS”上,它总是取最后一个值。您应该使用不同的键或仅从“LISTS”键中获取先前的值,添加分隔符并附加新的首选项。然后在您的 LoadPReferences 中使用 String.split(pattern) 来获取所有值。

于 2013-06-26T16:55:58.877 回答
0

你不是覆盖同一个键吗?

SavePreferences("LISTS", task);

在 editor.putString(key, value);

它将始终写入 SharedPreferences 的键“LISTS”,覆盖先前的值。

您应该尝试将当前保存的值获取到字符串并附加新值。

有点:

String dataset = loadPreferences();
SavePreferences("LISTS",dataset+task);

取决于所需的保存格式。

- 例子 -

protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
   SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
   JSONArray array = new JSONArray(data.getString(key,"");
   SharedPreferences.Editor editor = data.edit();
   editor.putString(key, value);
   editor.commit();
}


protected void LoadPreferences(){
   SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
   JSONArray dataSet = new JSONArray(data.getString("LISTS", "None Available");)
   for(int i = 0; i<dataSet.length; i++)
     adapter.add(dataSet.getString(i);
   adapter.notifyDataSetChanged(); // You don't need this if you aren't overriding the Adapters 'add' method.
}
于 2013-06-26T16:53:08.290 回答