Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android SharedPreferences after reboot device

My English very very BAD cause i'm Russian. :)

In my application I use SharedPreferences to store my values. The data has stored in the SharedPreferences, when application is running, and after exit from it. And everything works fine until I reboot my device. After reboot I can't use SharedPreferences, and the application doesn't read and write the data from there. I use the function getPreferences(0) to get preferences from application data folder. I also tried to use the getSharedPreferences(myPref, MODE_PRIVATE), but the effect is the same. Saves only one solution - data cleaning application after reboot device.

    favoriteButton = (ImageView) findViewById(R.id.favorite_button);
    SharedPreferences favorite = getSharedPreferences("Favorites", MODE_PRIVATE);
    if(favorite.getString(""+Loader.currentVideo.getTitle()+"", "") == "true") {
        favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_selected));
    } else {
        favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_empty));
    }
    favoriteButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            SharedPreferences favorite = getSharedPreferences("Favorites", MODE_PRIVATE);
            SharedPreferences.Editor editor = favorite.edit();
            if(favorite.getString(""+Loader.currentVideo.getTitle()+"", "") == "true") {
                favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_empty));
                Loader.favoriteVideos.remove(Loader.currentVideo);
                editor.remove(""+Loader.currentVideo.getTitle()+"");
            } else {
                favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_selected));
                Loader.favoriteVideos.add(Loader.currentVideo);
                editor.putString(""+Loader.currentVideo.getTitle()+"", "true");
            }
            editor.commit();
        }
    });
like image 667
BarkovAndrey Avatar asked Aug 02 '12 11:08

BarkovAndrey


1 Answers

Thank you all for your advice! But I had solved this problem! I hope this helps someone, here's a solution.

Before you request a value SharedPreferences, check the availability of keys!!!

SharedPreferences sharedpreferences = getSharedPreferences("SharedPreferences", MODE_PRIVATE); sharedpreferences.contains("key") --- check key!

    favoriteButton = (ImageView) findViewById(R.id.favorite_button);
    SharedPreferences favorite = getSharedPreferences("Favorites", MODE_PRIVATE);
    String tempFav = "";
    if(favorite.contains(""+Loader.currentVideo.getTitle()+"")) {
        tempFav = favorite.getString(""+Loader.currentVideo.getTitle()+"", "");
    }
    if(tempFav.equalsIgnoreCase("true")) {
        favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_selected));
    } else {
        favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_empty));
    }
    favoriteButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            SharedPreferences favorite = getSharedPreferences("Favorites", MODE_PRIVATE);
            SharedPreferences.Editor editor = favorite.edit();
            String tempCFav = "";
            if(favorite.contains(""+Loader.currentVideo.getTitle()+"")) {
                tempCFav = favorite.getString(""+Loader.currentVideo.getTitle()+"", "");
                Log.d(Loader.currentVideo.getTitle());
                Log.d(tempCFav);
            }
            if(tempCFav.equals("true")) {
                favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_empty));
                Loader.favoriteVideos.remove(Loader.currentVideo);
                editor.remove(""+Loader.currentVideo.getTitle()+"");
            } else {
                favoriteButton.setImageDrawable(getResources().getDrawable(R.drawable.fav_selected));
                Loader.favoriteVideos.add(Loader.currentVideo);
                editor.putString(""+Loader.currentVideo.getTitle()+"", "true");
            }
            editor.commit();
        }
    });
like image 93
BarkovAndrey Avatar answered Oct 25 '22 16:10

BarkovAndrey