Java 无法加载SharedReference
我想在应用程序暂停时将其状态保存在SharedReferences中,并在调用onResume时加载它: 在我的onPause方法中: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())
@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();