我如何知道Android SharedReference已成功保存?

我如何知道Android SharedReference已成功保存?,android,sharedpreferences,Android,Sharedpreferences,我正在保存一些数据以共享来自片段的引用,并希望在其他片段中使用这些数据。但我只希望在成功保存SharedReference时执行片段事务,否则,其他片段将无法检索数据(因为使用这些SharedReference值检索数据) 我的代码: public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ ... ... ... ... .

我正在保存一些数据以共享来自片段的引用,并希望在其他片段中使用这些数据。但我只希望在成功保存SharedReference时执行片段事务,否则,其他片段将无法检索数据(因为使用这些SharedReference值检索数据)

我的代码:

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;
  }
}
如何确保SharedReference成功保存?
有没有办法实现只有在成功保存SharedReferences时才会调用的回调?

表单

应用()

这会立即将数据保存到内存中,并将数据保存到 磁盘位于单独的线程上。因此,不可能阻塞主管道 线程(你的应用程序不会挂起)

这是首选技术,但仅从那时起可用 姜饼(API 9,Android 2.3)

commit()

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

如果需要确认成功保存文件,请使用
commit()
数据或如果您正在开发预姜饼设备<代码>提交() 已从API 1开始提供

因此,您可以在
editor.commit()检查状态

commit()

应用()

这会立即将数据保存到内存中,并将数据保存到 磁盘位于单独的线程上。因此,不可能阻塞主管道 线程(你的应用程序不会挂起)

这是首选技术,但仅从那时起可用 姜饼(API 9,Android 2.3)

commit()

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

如果需要确认成功保存文件,请使用
commit()
数据或如果您正在开发预姜饼设备<代码>提交()
已从API 1开始提供

因此,您可以在
editor.commit()检查状态

commit()

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
然后检查
commit()
方法

返回类型:布尔值

说明:如果新值成功写入持久性存储,则返回true

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
然后检查
commit()
方法

返回类型:布尔值

说明:如果新值成功写入持久性存储,则返回true

如果保存有效,则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之间的差异将返回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()
}
应用和提交之间的区别找到解决方案:

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
}
找到解决方案:

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
}
commit()将返回布尔值,这将让您知道数据是否已保存

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

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

编辑器.commit()将返回布尔值,这将让您知道数据是否已保存

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


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

据我所知,
Editor.commit
返回与您所需相同的内容。您可以通过Editor.commit()Editor.commit()对其进行判断,
Editor.commit
返回与您需要的内容相同的内容。您可以通过Editor.commit()Editor.commit()判断。我认为您可以使用
return Editor.commit()替换整个if-else。commit()
您的链接是俄语的。请把它改成英语。完成。我以为这个页面还没有翻译。你的链接是俄语的。请把它改成英语。完成。我以为这一页还没有翻译。