重启设备后的Android SharedPreferences

时间:2012-08-02 11:37:36

标签: android sharedpreferences

我的英语很不好因为我是俄罗斯人。 :)

在我的应用程序中,我使用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();
        }
    });

3 个答案:

答案 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”