Java 无法加载SharedReference

Java 无法加载SharedReference,java,android,Java,Android,我想在应用程序暂停时将其状态保存在SharedReferences中,并在调用onResume时加载它: 在我的onPause方法中: @Override protected void onPause() { super.onPause(); SharedPreferences prefs = getSharedPreferences("MyPrefName", 0); if(socket!=null && socket.isConnected())

我想在应用程序暂停时将其状态保存在SharedReferences中,并在调用onResume时加载它:

在我的onPause方法中:

@Override
protected  void onPause()
{
    super.onPause();
    SharedPreferences prefs = getSharedPreferences("MyPrefName", 0);
    if(socket!=null && socket.isConnected())
    {
        releaseOutputSocket();
        prefs.edit().putString("started", "started");
    }
    else
        prefs.edit().putString("started", "stoped");
    boolean res = prefs.edit().commit(); //res == true
}
在onResume方法中,我执行以下操作:

@Override
public void onResume()
{
    super.onResume();
    SharedPreferences prefs = getSharedPreferences("MyPrefName", 0);
    Log.v("Main", prefs.getString("started", "default")); // in log I see "default"   
}

你能告诉我,我的代码出了什么问题吗

您每次都要创建一个新的SharedReferences.Editor并提交一个空白编辑器。你没有犯下其他的错误。而是:

SharedPreferences.Editor edit = prefs.edit();
edit.putString("newString", "started");
edit.commit();
  @Override
 protected  void onPause()
{
 super.onPause();
SharedPreferences prefs = getSharedPreferences("MyPrefName", 0);
Editor edit = prefs.edit();
if(socket!=null && socket.isConnected())
{
    releaseOutputSocket();
    edit.putString("started", "started");
}
else
    edit.putString("started", "stoped");
edit.commit(); //res == true
}

错误之处在于,每次调用
SharedReferences.edit()
时,都会获得一个新的
编辑器
对象。根据文件规定:

为这些首选项创建一个新的编辑器,通过该编辑器可以修改首选项中的数据,并自动将这些更改提交回SharedReferences对象

所以要解决这个问题,只需调用edit一次。您的代码可以更改为:

SharedPreferences.Editor edit = prefs.edit();
edit.putString("newString", "started");
edit.commit();
  @Override
 protected  void onPause()
{
 super.onPause();
SharedPreferences prefs = getSharedPreferences("MyPrefName", 0);
Editor edit = prefs.edit();
if(socket!=null && socket.isConnected())
{
    releaseOutputSocket();
    edit.putString("started", "started");
}
else
    edit.putString("started", "stoped");
edit.commit(); //res == true
}

您需要对用于放置字符串的引用调用commit。调用prefs.edit()时,将获得一个新引用,而不是同一个对象

SharedPreferences.Editor prefs = getSharedPreferences("MyPrefName", 0).edit();
[..]
prefs.putString(..);
[..]
prefs.commit();