我怎么知道Android SharedPreferences已成功保存?

时间:2017-04-26 10:44:02

标签: android sharedpreferences

我正在从片段中将一些数据保存到SharedPreference,并希望在其他片段中使用这些数据。但是我想只在成功保存SharedPreferences时执行片段事务,否则,其他片段将无法检索数据(因为使用这些SharedPreference值来检索数据)。

我的代码:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

  ... ... ... ... ... ... ... ... ...

  public void setSharedPref(String key, String val) {
      SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
      SharedPreferences.Editor editor = sharedPref.edit();
      editor.putString(key, val);
      editor.commit();

  }

  public String fetchSharedPref(String key) {
      SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
      String val = sharedPref.getString(key, Constant.SHARED_PREF_DEFAULT_MSN);
      return val;
  }
}

如何确保成功保存SharedPreferences? 是否有任何方法可以实现仅在SharedPreferences成功保存时才会调用的回调?

5 个答案:

答案 0 :(得分:3)

来自 docs

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

然后去检查commit()方法here

  

返回类型:布尔值

     

描述:如果新值已成功写入持久存储,则返回true。

答案 1 :(得分:2)

找到解决方案:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("Your Key", "Your value");
boolean savedOrNot = editor.commit();

if(savedOrNot){
// Successfully saved
}else{
// Not saved
}

答案 2 :(得分:1)

表格Documentation

  

应用()

     

这会立即将数据保存到内存中并保存数据   磁盘在一个单独的线程上。所以没有机会阻挡主力   线程(你的应用程序不会挂起)。

     

这是首选技术,但此后才可用   Gingerbread(API 9,Android 2.3)。

     

<强>提交()

     

调用此方法会将数据保存到文件中,但过程是   在调用它的线程中执行,停止其他所有操作   直到保存完成。 成功完成后返回true,   失败时错误。

     

如果您需要确认保存成功,请使用commit()   数据或者您是否正在为姜饼设备开发。 commit()   自API 1以来一直可用

因此您可以在editor.commit();

查看状态 如果保存有效,

commit()会返回true,否则会返回false

答案 3 :(得分:1)

如果保存工作,

commit()返回true,否则返回false。 您可以按如下方式更改方法。

public boolean setSharedPref(String key, String val) {
    SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString(key, val);
    return editor.commit()
}

apply和commit https://developer.android.com/reference/android/content/SharedPreferences.Editor.html

之间的区别

答案 4 :(得分:1)

editor.commit()将返回布尔值,它会告诉您数据是否已保存。

如果您想分析共享首选项和sqlite中保存的所有数据,那么我建议使用facebook stetho

它是android的调试桥,您可以检查所有共享首选项数据和SQL数据库以进行调试。