我的英语很不好因为我是俄罗斯人。 :)
在我的应用程序中,我使用SharedPreferences
来存储我的值。
当应用程序运行时,以及退出数据后,数据已存储在SharedPreferences
中。一切正常,直到我重新启动设备。重启后我无法使用SharedPreferences
,并且应用程序不会从那里读取和写入数据。
我使用函数getPreferences(0)
从应用程序数据文件夹中获取首选项。
我也尝试使用getSharedPreferences(myPref, MODE_PRIVATE)
,但效果是一样的。仅保存一个解决方案 - 重启设备后的数据清理应用程序。
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();
}
});
答案 0 :(得分:2)
谢谢大家的意见!但我解决了这个问题! 我希望这有助于某人,这是一个解决方案。
在您请求值SharedPreferences之前,请检查密钥的可用性!!!
SharedPreferences sharedpreferences = getSharedPreferences(“SharedPreferences”,MODE_PRIVATE); sharedpreferences.contains(“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();
}
});
答案 1 :(得分:1)
以下代码可以帮助您保存共享偏好。重要的部分是edit.commit(); 如果这不起作用,那么您使用的手机可能会有一些不同的行为,因为手机制造商可能已经修改过某些东西..
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();
}
答案 2 :(得分:0)
将这些行添加到清单Application Tag中。
android:allowBackup =“ true” android:fullBackupContent =“ true”