当前位置: 首页 > 知识库问答 >
问题:

应用程序在重启时不断忘记共享首选项

宋康安
2023-03-14

我不知道该怎么办了

似乎在android 3.0及更高版本上工作得很好,但在android 2.3.3上,每次我启动应用程序时,它都会再次询问用户名/密码。

我正在使用共享偏好设置。

以下是我保存首选项的方式:

        SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("username", username).commit();
        editor.putString("password", password).commit();

我是这样读的:

    SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", Context.MODE_PRIVATE);
    String username = preferences.getString("username", "");
    String password = preferences.getString("password", "");

我还尝试使用以下代码保存首选项:

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("username", username).commit();
        editor.putString("password", password).commit();

然后用这段代码读出来:

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
    String username = preferences.getString("username", "");
    String password = preferences.getString("password", "");

但这也不管用。

问题是在我重新启动应用程序之前,我可以看到它们仍然存在。然而,只要我重新启动,我就会得到用户名为“”(空字符串),密码为“”的结果。

任何想法将不胜感激

共有3个答案

赫连子石
2023-03-14

你有两个选择:

>

  • 在活动的生命周期中获取共享的首选项值。

    调用<code>。清除之前的。提交

    看到我的回答:

    重新启动Android后,自定义小部件中的Android持久可检查菜单

  • 狄宗清
    2023-03-14

    试试这个:

     SharedPreferences preferences = context.getSharedPreferences("YOUR_TAG", 0);
     String username = preferences.getString("username", "");
     String password = preferences.getString("password", "");
    
    
      SharedPreferences.Editor editor = preferences.edit();
        editor.putString("username", username).commit();
        editor.putString("password", password).commit();
    

    其中,上下文是您的应用程序的上下文:

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
    
            context = this;
    
    连俊智
    2023-03-14
    public class MyApplication extends Application {
        private static MyApplication instance;
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.d(TAG, "onCreate() called");
        }
    
        public MyApplication() {
            super();
            Log.d(TAG, "Constructor called");
            instance = this;
        }
    
    
        public static MyApplication getApplication() {
            if (instance == null) {
                instance = new MyApplication();
            }
            return instance;
        }
    }
    

    和用法:

    MyApplication.getApplication().getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE)
    
     类似资料:
    • 我在我制作的闪屏页面中调用共享首选项 这是我的方法 顺便说一下,我不知道这一行是什么//??这是我的日志 正在执行热重启。。。正在将文件同步到为x86构建的Android SDK设备。。。1776ms内重新启动应用程序。I/flatter(8982):loadingScreen=true E/flatter(8982):[ERROR:flatter/lib/ui/ui\u dart\u state

    • 我正在使用FB。允许用户使用此代码共享我的页面的ui: 当从 Android 移动应用程序中的嵌入式浏览器共享页面时,用户可以选择要用于打开共享对话框的应用程序。如果选择了脸书应用,则不会有回调响应。在普通的桌面浏览器中,一切都按预期工作。这种行为是预期的吗?

    • 对于下面的代码,我正在尝试检索共享的首选项,我认为它保存正确,但当我回到登录屏幕时,所有的数据都消失了。我需要它留在我回到这个屏幕上。所以我在个人资料页面上输入姓名、年龄和id到三个单独的行中。然后按下save按钮,然后按下action Bar上的back转到前面的页面。当我回到个人资料页面时,我的信息应该还在那里,但它没有任何帮助?

    • 非常感谢您的光临,我正在为学校开发一个应用程序,我遇到了另一个问题。该应用程序的主要思想是跟踪您的卡路里,我希望它能节省卡路里,所以当应用程序关闭时,它仍然会记住他们。我已经忙了一段时间了,现在尝试使用SavedPreferences,但我总是出现错误。我希望有人能帮我。 } 我可能做了很多明显的愚蠢的事情,但我真的弄不明白。 多谢!

    • 我正在开发一个应用程序,我在共享偏好中保留布尔标志,以检查当前会话是否处于活动状态。基于此标志,用户将在显示闪屏后导航到主屏幕或登录屏幕。 这运行良好,但我们的一位客户报告说,即使在卸载和重新安装他的应用程序后,他的应用程序仍会让他的用户登录。 他跟随的步骤 安装应用程序 使用有效凭据登录 从设置中卸载应用程序 使用我提供的apk重新安装应用程序 打开应用程序 我认为当我们卸载应用程序时,其数据会

    • 我有一个Azure应用程序服务运行我自己的docker映像,它基于。 部署到服务工作正常,网站按预期运行。 我希望能够在容器之间共享一些文件,以前我一直使用映射为docker卷的Azure FileStorage帐户,但由于某些原因,docker/pm2/node会不断执行写入操作,这意味着巨大的成本。 我想使用内置的持久化存储,并将应用程序设置设置为true,从理论上讲,这应该在容器之间共享目录