Java 当我强制关闭应用程序时,SharedReferences If/Else语句无法正常工作

Java 当我强制关闭应用程序时,SharedReferences If/Else语句无法正常工作,java,android,sharedpreferences,Java,Android,Sharedpreferences,问题摘要:当我通过打开任务窗口并滑动它来强制关闭应用程序时,我的if/else语句无法正常工作。我将名称选择活动作为默认启动器活动。只有在没有共享pref时,名称选择活动才会弹出,这意味着用户尚未从微调器中选择名称。但即使在用户选择了一个名称并将其存储在Share Prefs中之后,当我强制关闭应用程序时,我仍然会返回到名称选择活动 我尝试的是如果stringNamePackage.equals和如果stringNamePackage==和如果NAME.equals和if NAME==起初我认为

问题摘要:当我通过打开任务窗口并滑动它来强制关闭应用程序时,我的if/else语句无法正常工作。我将名称选择活动作为默认启动器活动。只有在没有共享pref时,名称选择活动才会弹出,这意味着用户尚未从微调器中选择名称。但即使在用户选择了一个名称并将其存储在Share Prefs中之后,当我强制关闭应用程序时,我仍然会返回到名称选择活动

我尝试的是如果stringNamePackage.equals和如果stringNamePackage==和如果NAME.equals和if NAME==起初我认为这是因为我的共享Prefs没有正确保存名称,但事实并非如此,当我强制关闭它时,名称仍然正确显示。但是,当我尝试添加if/else语句时,它总是将我发送回名称选择活动,而不管我是否在共享Prefs中保存了名称。我花了4个小时试着让它工作,我已经不知所措了。我还花了几个小时看了不同的关于如何保存和检索共享Pref数据的堆栈文章。我甚至试过了,但仍然不起作用

名称选择活动

清算名称

SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.clear();
                editor.commit();
                finish();

我期望:我期望用户在第一次启动应用程序时必须选择一个名称。然后,每次他们打开应用程序时,if/else语句都会检查用户是否在共享Prefs中有姓名。如果他们有名字,他们将直接进入主要活动。如果他们不这样做,他们将返回到名称选择活动。

要获取数据并将数据存储到您的共享参考中,请使用以下方法:

SharedReferences SharedReferences=GetSharedReferencesGetPackageName,Context.MODE\u PRIVATE

PreferenceManager.GetDefaultSharedPreferenceContext用于构建设置屏幕或类似屏幕,第一个用于存储/检索不一定绑定到UI的任意数据的屏幕

更重要的是,如果您想组织您的SharedReference,您可以在getPackageName中附加不同的键,如:

getSharedPreferences(getPackageName() + ".booleans", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".flags", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".keys", Context.MODE_PRIVATE);
它们中的每一个都是存储共享首选项的不同文件,您可以使用前置点。但是为了保持命名一致性,最好保留它,实际上不需要额外的键,但是如果您有某种OCD,这可能会很轻松;-


然后,您可以使用Android Studio的设备资源管理器浏览共享首选项,它们位于data/data/your.package.name/shared_prefs

下面这是学习使用调试器的好时机。这将允许您查看stringNamePackage的值。此外,对于比较空字符串,这通常更可取:.equalstr。ApacheCommonsLang对于常见字符串操作也非常有用。我将其更改为if.equalStringDeviceNamePackage,在我强制终止应用程序后,以及在用户已选择名称并将其存储在共享首选项中后,它仍然将我发送到名称选择活动。您是使用PreferencesManager设置菜单或配置活动,还是使用它存储任意数据,不一定要链接到UI?您的名称选择活动似乎不是从任何地方的共享首选项获取名称。。。你怎么能期望它不是一个空字符串呢?我猜出来了@Racu你提出了优先权管理者让我回去改变代码。读了4个小时不同的解决方案后,事情肯定会搞混。SharedReferences SharedReferences=GetSharedReferencesShared\u PREFS,模式\u PRIVATE;String nameSharedPref=SharedReferences.getStringNAME,null;然后我运行if nameSharedPref==null并删除了PreferencesManager,并将其替换为“getSharedPreferenced\u PREFS,MODE\u PRIVATE”``完美的经过数小时的研究解决方案后,PreferenceManager在某个地方开始尝试。感谢您提出并指出这一点。如果您想构建设置屏幕,PreferenceManager非常强大,使其非常简单,但对于任意数据或使您自己的设置屏幕共享参考就足够了。
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.clear();
                editor.commit();
                finish();
getSharedPreferences(getPackageName() + ".booleans", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".flags", Context.MODE_PRIVATE);
getSharedPreferences(getPackageName() + ".keys", Context.MODE_PRIVATE);