【问题标题】:android sharedpreferences does not save data when app restartandroid sharedpreferences在应用重启时不保存数据
【发布时间】:2016-06-24 11:39:14
【问题描述】:

我有一个sharedpreference,它可以很好地保存数据,直到应用程序关闭。当应用程序重新启动sharedpreferences 中的数据时,请告诉我解决方案。我想在应用关闭或重启或手机重启时保存preferences 中的数据。

public static final String MyPREF_MOB = "MyPref_mob";
public static final String WALLPAPER_MOB = "wallpaper_mob";

if(encodedImagee!=null) {
    // shre1 = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor edit = shre1.edit();
    edit.putString(WALLPAPER_MOB, encodedImagee);
    edit.apply();
    //  Toast.makeText(Profile1Activity.this, "new same image in prefrences", Toast.LENGTH_SHORT).show();
}
shre1 = getSharedPreferences(MyPREF_MOB, Context.MODE_PRIVATE);
final String image_save =shre1.getString(WALLPAPER_MOB, "");

我也试过这个

 if(encodedImagee!=null)
        {
           // shre1 = PreferenceManager.getDefaultSharedPreferences(context);
            SharedPreferences.Editor edit = shre1.edit();
            edit.putString("mob_wallpaper", encodedImagee);
            edit.commit();
            //  Toast.makeText(Profile1Activity.this, "new same image in prefrences", Toast.LENGTH_SHORT).show();
        }
        shre1 = PreferenceManager.getDefaultSharedPreferences(context);
        final String image_save =shre1.getString("mob_wallpaper", "");

我已经使用此代码在应用重启时保存数据,我也可以获取数据,但是当手机重启时数据又消失了

if(encodedImagee!=null)
        {
           // shre1 = PreferenceManager.getDefaultSharedPreferences(context);
            SharedPreferences.Editor edit = shre1.edit();
            edit.remove("mob_wallpaper");
            edit.apply();
            edit.putString("mob_wallpaper", encodedImagee);
            edit.apply();
            //  Toast.makeText(Profile1Activity.this, "new same image in prefrences", Toast.LENGTH_SHORT).show();
        }
        shre1 = PreferenceManager.getDefaultSharedPreferences(context);
        final String image_save =shre1.getString("mob_wallpaper", "");

【问题讨论】:

  • 请提供有关在应用程序生命周期内何时保存数据以及何时再次检索数据的更多信息。以及如何
  • 我有一个循环,在其中我使用 sharedprefrences 获取数据并保存和检索它的工作正常但是当应用程序关闭时 sharedprefences 中的数据消失了
  • 请提供更多代码
  • @AbhishekPatel 哪种类型的代码?
  • 显示您在哪里保存/查询数据的代码

标签: android sharedpreferences


【解决方案1】:

试试这个,

        SharedPreferences sharedPreferences = getSharedPreferences("preference_name", Context.MODE_PRIVATE);
        if (encodedImagee != null){
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putString("mob_wallpaper", encodedImagee);
            edit.commit();
        }else{
            final String image_save = sharedPreferences.getString("mob_wallpaper","");
            // put your logic over here
        }

【讨论】:

  • SharedPreferences 仅在应用数据清除和卸载时清除数据。
  • SharedPreferences shre1;
  • 共享偏好的对象如何?
  • 尝试更新代码。同时发布encodedImagee的逻辑
【解决方案2】:

我假设您使用的示例代码

  • PreferenceManager.getDefaultSharedPreferences阅读
  • getSharedPreferences(MyPREF_MOB, Context.MODE_PRIVATE)写作

我认为你应该在两种情况下都使用相同的。

尝试替换

shre1 = getSharedPreferences(MyPREF_MOB, Context.MODE_PRIVATE);

通过

shre1 = PreferenceManager.getDefaultSharedPreferences(context);

【讨论】:

  • 它工作正常保存数据和检索数据,但是当应用重启时数据消失了
【解决方案3】:
//get the preference instance with this
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
// acccess a saved key value
mPrefs.getString("key", "default_value");
//save a key-value
mPrefs.edit().putString("key", "new_value").apply();

【讨论】:

    【解决方案4】:

    以这种方式修改您的代码:

    @Override
    public void onCreate(.....){
        super.onCreate(......);
    setContentView(R.layout.your_layout_xml);
    shre1 = getSharedPreferences(MyPREF_MOB, Context.MODE_PRIVATE);
    
    final String image_save =shre1.getString(WALLPAPER_MOB, "");
    

    以及何时更新图像

    if(encodedImagee!=null) {
    // shre1 = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor edit = shre1.edit();
    edit.putString(WALLPAPER_MOB, encodedImagee);
    edit.commit(); //make use of commit
    //  Toast.makeText(Profile1Activity.this, "new same image in prefrences", Toast.LENGTH_SHORT).show();
    }
    

    【讨论】:

    • 您是否介意更详细地更新您的问题。我只能通过您提供的 sn-p 来判断这一点
    • 我有更新问题我有一个解决方案,但它在手机重启时不起作用,但在应用重启时它起作用
    • 你为什么要一次又一次地加载 pref?
    • 因为我想获取当前壁纸循环一次又一次保存当前壁纸
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多