【问题标题】:Shared Preferences aren't getting updated共享首选项未更新
【发布时间】:2014-04-13 17:02:59
【问题描述】:

我有一个主要活动是创建共享偏好并每小时为其分配一个值。那里的共享首选项被创建,并被传递到一个列表视图,该列表视图使用适配器类来填充并从相同的共享首选项中提取值在第二个活动中,用于检索的代码被写入简历中,以便它可以按下返回时显示更新的数字。看起来像这样,onlisttem 单击侦听器将控件转发到此活动,该活动假设添加或减去值并更新共享首选项,我在 onpause 和 onBackPressed 中对其进行更新,因为我认为放入 onClickListener 太多了,这是 Last counter 活动的代码。问题是共享首选项没有更新。

ImageButton add,sub,push;
TextView countkeeper, countpusher;
String []hours={"8:30 - 9:30","9:30 - 10:30","10:30 - 11:30","11:30 - 12:30","12:30 - 1:30","1:30 - 2:30","2:30 - 3:30","3:30 - 4:30","4:30 - 5:30"};
int lip,c,target;
Intent i;
SharedPreferences sp,sp1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_counter);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    add=(ImageButton)findViewById(R.id.imageButton1);
    sub=(ImageButton)findViewById(R.id.imageButton2);
    push=(ImageButton)findViewById(R.id.imageButton3);
    countkeeper=(TextView)findViewById(R.id.countkeeper);
    countpusher=(TextView)findViewById(R.id.countpusher);

    sp= getSharedPreferences("Count", MODE_APPEND);
    Log.d("CurrentCountFor"+hours[lip],""+sp.getInt("CurrentCountFor"+hours[lip], 10));
    c=sp.getInt("CurrentCountFor"+hours[lip], 10);
    target=sp.getInt("TargetFor"+hours[lip], 10);



    i=getIntent();
    lip= i.getIntExtra("lip", 0);


    add.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            c = c+1;
            countkeeper.setText("Count for "+hours[lip]+" is "+c+"/"+target);



        }
    });

    sub.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            c=c-1;
            countkeeper.setText("Count for "+hours[lip]+" is "+c+"/"+target);


        }
    });
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    sp1= getSharedPreferences("Count", MODE_APPEND);
    SharedPreferences.Editor edit=sp1.edit();
    edit.putInt("CurrentCountFor"+hours[lip], c);
    sp1.edit().commit();

};

@Override
protected void onPause() {
    super.onPause();
    sp1= getSharedPreferences("Count", MODE_APPEND);
    SharedPreferences.Editor edit=sp1.edit();
    edit.putInt("CurrentCountFor"+hours[lip], c);
    sp1.edit().commit();


};

请帮助任何人。

【问题讨论】:

    标签: android performance android-layout android-intent android-listview


    【解决方案1】:

    sp1.edit().commit(); 替换为edit.commit();

    你有两次同样的问题。

    【讨论】:

    • 虽然这改变了共享首选项中的值,但当我从列表视图返回时,接下来的几个小时计数,即 c 值保持不变,这意味着如果在 8:30 按下添加按钮 2 次到9:30,然后退出并返回到 9:30 到 10:30 小时列表项 c 的值,默认情况下假定为 0 或曾经假定的小时数,现在为 2 或与之前相同的值最后在那项活动中
    • 我不确定我是否很好地理解了这个问题......但在我看来,您没有重新加载保存的值。我错过了什么吗?
    • 我通常会向一个类添加一些共享方法,用于从 SharedPreferences 加载和保存值。我的方法有 settings_readAll()、settings_writeInt(key, value) 等名称。我只在需要时使用 writeXYZ 方法,并且每次我进行一些更改时使用 settings_readAll。请注意,阅读设置了一些共享变量,以便我也可以在其他活动中阅读它们。
    • 不客气。我希望我给了你一个很好的建议,告诉你如何朝着正确的方向前进。
    • 保持屏幕打开不是一个好习惯,它会打扰用户。但是...这里是:stackoverflow.com/questions/5712849/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多