Java 提交后未保存SharedReferences

Java 提交后未保存SharedReferences,java,android,Java,Android,您好,我有以下代码将arraylist存储到列表中,然后将其保存到SharedReference中。但是当我重新运行应用程序时,这些值就消失了,无论我调用多少次,在arraylist中添加更多元素,它都只会调用一次。 以下是我的代码: //debug usage Button z = (Button)findViewById(R.id.button3); z.setOnClickListener(new View.OnClickListener() { @O

您好,我有以下代码将arraylist存储到列表中,然后将其保存到SharedReference中。但是当我重新运行应用程序时,这些值就消失了,无论我调用多少次,在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();
//调试用法
按钮z=(按钮)findViewById(R.id.button3);
z、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图arg0){
测试结果添加(“1”);
测试结果添加(“2”);
测试结果添加(“3”);
}
});
SharedReferences prefs=this.getSharedReferences(“YourPrefsky”,Context.MODE\u PRIVATE);
SharedReferences.Editor edit=prefs.edit();
Set=newhashset();
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));
    }
SharedReferences prefs=this.getSharedReferences(“yourpresky”,Context.MODE\u PRIVATE);
Set Set=prefs.getStringSet(“yourKey”,null);
列表样本=新阵列列表(集合);
testres=新阵列列表(集合);
对于(int i=0;i
无论我调用onclick多少次,testres都只有
arraylist中的1,2,3,如果我重新启动应用程序

因为您在活动开始时将值保存在
SharedReferences
中,该活动仅使用默认值保存ArrayList

若要使用按钮上添加的项目保存
testres
,请在ArrayList中添加项目后,在onClick方法中使用
SharedReferences
相关代码

        @Override
        public void onClick(View arg0) {
            testres.add("1");
            testres.add("2");
            testres.add("3");
            //... save testres ArrayList in SharedPreferences here
        }
SharedReferences prefs=this.getSharedReferences(“yourpresky”,Context.MODE\u PRIVATE);
SharedReferences.Editor edit=prefs.edit();
按钮z=(按钮)findViewById(R.id.button3);
z、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图arg0){
测试结果添加(“1”);
测试结果添加(“2”);
测试结果添加(“3”);
Set=newhashset();
set.addAll(testres);
edit.putStringSet(“yourKey”,set);
edit.commit();
}
});

Try.apply()不是通过重新启动来提交,你的意思是,从eclipse以调试/运行模式重新部署,还是退出应用程序并从启动器启动?@Eyball尝试过但不起作用。=/@GokulNath关闭并从菜单bro重新运行。您好,谢谢您的回答。是的,我可以在启动应用程序时检索我的值,但我无法将更多元素添加到我的arraylist否不管调用了多少onclick。你有什么建议吗?嗨,谢谢你的回答。是的,我可以在按照上面的建议启动应用程序时检索我的值,但无论调用了多少onclick,我都无法在我的arraylist中添加更多的元素。你有什么建议吗?@Gene:在列表中添加更多你拥有的项目添加到SharedReferences中。首先,您需要从ArrayList中的
SharedReferences
获取所有值,然后在ArrayList中添加从
SharedReferences
检索到的其他项。如果您有任何困惑,请告诉我?您好,我相信我是通过List sample=new ArrayList(set);testres=new ArrayList(set)完成的;我做错了吗?@Gene:我希望你知道Set总是包含不重复的项,这就是为什么你总是得到
1,2,3
@Gene:
Set.addAll(testres);
行在
Set
中不再添加相同的项
1,2,3
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();
    }
});