简体   繁体   English

SharedPrefenrences不存储布尔值

[英]SharedPrefenrences not storing boolean value

Am trying save boolean FAVOURITE data in sharedPreferences. 我正在尝试将布尔FAVORITE数据保存在sharedPreferences中。 when phone is rotated or closed .It is not working it is taking default value. 当手机旋转或关闭时。它不起作用,它使用的是默认值。 I don't know whats wrong with this code. 我不知道这段代码有什么问题。 i am unable to figure out whats the problem is can someone show me the problem with the code 我无法弄清楚问题出在哪里,有人可以向我展示代码问题吗?

//Context context =this;

 String FAVOURITE = "selected";

boolean favourite = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState!=null){
        favourite = savedInstanceState.getBoolean(FAVOURITE,false);
        Toast.makeText(this,""+favourite,Toast.LENGTH_SHORT).show();

    }

    final Bundle queryBundle = new Bundle();

    movieObject=(CardsClass)getIntent().getSerializableExtra("movieObject");

    setTitle(movieObject.getmTitle());

    setContentView(R.layout.activity_details);

    final ImageView fav = (ImageView)findViewById(R.id.fav);

    fav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (favourite == false) {

                favourite = true;

                fav.setImageResource(R.drawable.fav_on);

                Toast.makeText(DetailsActivity.this, favourite + " is added to favourites", Toast.LENGTH_SHORT).show();

                queryBundle.putBoolean(FAVOURITE,favourite);

            }

            else if(favourite){

                favourite=false;

                fav.setImageResource(R.drawable.fav_off);

                queryBundle.putBoolean(FAVOURITE,favourite);

                Toast.makeText(DetailsActivity.this, movieObject.getmTitle() + " is removed from favourites", Toast.LENGTH_SHORT).show();


            }
        }
    });

Actually, you're doing the wrong thing. 实际上,您做错了事。 You should do something like: 您应该执行以下操作:

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putBoolean(FAVOURITE, favorite); // then you can check the favorite value in onCreate as well.
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    this.favorite = savedInstanceState.getBoolean(FAVOURITE);
    // do something here when restore.
    super.onRestoreInstanceState(savedInstanceState);
}

To write or read in the SharedPreferences 写入或读取SharedPreferences

Write: 写:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean(FAVORITE, favorite);
editor.commit();

Read: 读:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Boolean favorite = sharedPref.getBoolean(FAVORITE, true);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM