SharedPreferences可以节省麻烦

时间:2015-07-20 17:03:26

标签: android sharedpreferences

我正在为Android编写应用程序,我在保存活动状态方面遇到了困难。我使用共享偏好来保存图像视图的可见性。我有一个名为" flag"的布尔值这是假的。当我点击按钮时,标志变为true。我保存了真实的语句并在onCreate方法中将其重新执行。第一次它工作正常,我的图像是可见的。 但是下次当我关闭应用程序时,它再次看不见而且旗帜是假的。为什么?在删除应用程序之前,我希望此标志保持正确。欢迎任何回复。我复制了我的代码和LogCat。

private static final String DB_INIT = "DB_INIT";
private static final String IMAGE = "IMAGE";
private boolean flag = false;
Button btn;
ImageView imageview;

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

    btn = (Button)findViewById(R.id.btn);
    imageview = (ImageView)findViewById(R.id.imageview);

    SharedPreferences sp = getApplicationContext().getSharedPreferences(DB_INIT, Context.MODE_PRIVATE);
    Boolean ize = sp.getBoolean(IMAGE, false);

    Log.d("TEST6","CREATE flag "+flag);
    Log.d("TEST6","CREATE ize "+ize);

    if(ize){
        imageview.setVisibility(View.VISIBLE);
    }
    else{
        imageview.setVisibility(View.INVISIBLE);
    }

    btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            flag = true;
            imageview.setVisibility(View.VISIBLE);

            Log.d("TEST6","CREATE flag " +flag);

        }
    });
}
@Override
protected void onStop() {
    SharedPreferences sp = getApplicationContext().getSharedPreferences(DB_INIT,Context.MODE_PRIVATE);
    SharedPreferences.Editor et = sp.edit();
    et.putBoolean(IMAGE, flag);
    Log.d("TEST6","STOP flag " +flag);
    et.commit();
    super.onStop();
}  }

这是我的LogCat:

07-20 18:36:10.226:D / TEST6(5453):CREATE flag false

07-20 18:36:10.234:D / TEST6(5453):创建错误

07-20 18:36:27.156:D / TEST6(5453):CREATE flag true

07-20 18:36:39.390:D / TEST6(5453):STOP标志为真

07-20 18:36:43.507:D / TEST6(5453):CREATE flag false

07-20 18:36:43.507:D / TEST6(5453):创建ize true

07-20 18:36:47.375:D / TEST6(5453):停止标志错误

07-20 18:36:48.937:D / TEST6(5453):CREATE flag false

07-20 18:36:48.937:D / TEST6(5453):创建错误

我不明白为什么在第二种STOP方法中出现错误。

2 个答案:

答案 0 :(得分:2)

您未在flag中设置onCreate字段。如果局部变量ize取消,而只是直接设置flag

flag = sp.getBoolean(IMAGE, false);

...

if(flag){
    imageview.setVisibility(View.VISIBLE);
}
else{
    imageview.setVisibility(View.INVISIBLE);
}

答案 1 :(得分:2)

当您从共享偏好中读取布尔值时,请确保再次设置flag。当活动停止时,它可能会将IMAGE标志设置为false,因为flag为false。