Reputation: 131
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();
}
});
Upvotes: 6
Views: 11665
Reputation: 1518
Add these lines into manifest Application Tag.
android:allowBackup="true" android:fullBackupContent="true"
Upvotes: 0
Reputation: 131
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();
}
});
Upvotes: 2
Reputation: 427
Following code should work for you to save sharedpreferences. Important part is edit.commit(); If this doesn't work, then might be the phone that you are using has some different behavior as the phone manufacturer may have modified something..
private static final String PREFERENCES = "Preferences";
static protected SharedPreferences getSharedPreferences( Context context ) {
return context.getSharedPreferences( PREFERENCES, Context.MODE_PRIVATE);
}
public void setString(String setting, String value) {
SharedPreferences settings = getSharedPreferences( getApplicationContext() );
Editor edit = settings.edit();
edit.putString(setting, value);
edit.commit();
}
Upvotes: 0