提交后不保存SharedPreferences

时间:2015-02-09 04:19:37

标签: java android

您好我有以下代码将arraylist存储到列表中然后将其保存到SharedPreference中。但是当我重新运行应用程序时,值已经消失,无论我多少次调用向arraylist添加更多元素,它只会调用一次。 以下是我的代码:

  //debug usage
    Button z = (Button)findViewById(R.id.button3);
    z.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            testres.add("1");
            testres.add("2");
            testres.add("3");
        }
    });



    SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit=prefs.edit();

    Set<String> set = new HashSet<String>();
    set.addAll(testres);
    edit.putStringSet("yourKey", set);
    edit.commit();

这就是我检索的方式:

 SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey", Context.MODE_PRIVATE);
    Set<String> set = prefs.getStringSet("yourKey", null);
    List<String> sample= new ArrayList<String>(set);
    testres = new ArrayList<String> (set);

    for(int i =0; i<testres.size();i++){
        System.out.println("Printing: "+testres.get(i));
    }

无论我调用onclick多少次,testres在arraylist中只有1,2,3,如果我重新启动应用程序,arraylist中的元素就会消失。建议非常感谢你!

更新:我设法根据以下答案在启​​动时检索我的值,但仍然无法在arraylist中添加更多元素。 arraylist卡在元素1,2,3上。建议。

2 个答案:

答案 0 :(得分:2)

  

无论我多次调用onclick,testres都只有   在arraylist中1,2,3,如果我重新启动应用程序

由于您在活动开始时保存SharedPreferences中的值,仅保存具有默认值的ArrayList。

要保存testres您添加的项目,按钮点击也会在添加ArrayList中的项目后使用onClick方法中的SharedPreferences相关代码。

        @Override
        public void onClick(View arg0) {
            testres.add("1");
            testres.add("2");
            testres.add("3");
            //... save testres ArrayList in SharedPreferences here
        }

答案 1 :(得分:0)

SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey", Context.MODE_PRIVATE);
SharedPreferences.Editor edit=prefs.edit();


Button z = (Button)findViewById(R.id.button3);
z.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {

        testres.add("1");
        testres.add("2");
        testres.add("3");
        Set<String> set = new HashSet<String>();
set.addAll(testres);
edit.putStringSet("yourKey", set);
edit.commit();
    }
});