Java SharedPerferences似乎不起作用

Java SharedPerferences似乎不起作用,java,android,eclipse,sharedpreferences,Java,Android,Eclipse,Sharedpreferences,我试图在我的应用程序中使用SharedReferences,但它似乎不起作用 首先,我在计划使用SharedReferences的活动中将其声明为全局变量: SharedPreferences prefs; 然后在onCreate中设置默认SharedReferences: prefs = getSharedPreferences("urnikSp", 0); SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean("

我试图在我的应用程序中使用SharedReferences,但它似乎不起作用

首先,我在计划使用SharedReferences的活动中将其声明为全局变量:

SharedPreferences prefs;
然后在onCreate中设置默认SharedReferences:

prefs = getSharedPreferences("urnikSp", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("schudeleDownloaded", false);
editor.commit();
然后,当某个操作完成时,我更改布尔值:

prefs.edit().putBoolean("schudeleDownloaded", true).commit();
然后在重新启动的同一活动中,我检查onCreate中的布尔值,如下所示:

boolean schudeleDownloaded = prefs.getBoolean("schudeleDownloaded", false);
if (!schudeleDownloaded){
    new PopulateDatabase().execute();
}
即使我在完成某个操作时将新值设置为true,上面看到的IF语句仍然会执行,因为布尔值似乎仍然为false


我做错了什么?

您必须创建一个单独的SharedReferences.Editor实例。因此,与其这样做,不如:

prefs.edit().putBoolean("schudeleDownloaded", true).commit();
试试这个:

SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("schedeleDownloaded", true);
editor.commit();

让我随便猜一猜。因为当您重新启动时,您再次将其设置为false。。。。它位于onCreate函数中。

如果您正在重新创建活动,onCreate方法将再次被调用,因此我认为您将其值改回false似乎是正确的。。。你确定这是你写的代码吗?请发布你的整个onCreate函数。我想说的是,你的活动被破坏了,第二次调用onCreate时将其设置为false。这只是程序流问题吗?您说您将onCreate中的默认值设置为false。你总是在检查之前这样做吗?也许问题不在这里。当您认为onCreate是时,您确定它正在被调用吗?这只是我的猜测,但我认为你真的需要把这个移到简历上。这个答案是错误的。我经常使用第一种方法。第二种方法也可以,但这不是问题的原因problem@ScouseChris嗯,我实际上修复了一个SharedPreference不这样提交的问题。但它可能与早期的android版本有关?我会检查一下我是否能找到答案,因为我当时是这样问的。这个答案实际上帮助我解决了这个问题。有趣的是,SharedReferences上的方法。编辑器都应该返回该编辑器的实例,这样你就可以像初始代码中一样链接调用。我指的是这个问题的顶部答案:是的,我明白你的意思,调用“提交”时,所有挂起的编辑都会保存到光盘中,因此每次创建新的编辑器都会弄乱编辑。如果编辑器是一个局部变量,或者在等待后通过不同的方法访问,例如comms,那么这里不应该有问题。