应用程序在重启时忘记共享偏好

时间:2013-03-03 06:51:37

标签: android sharedpreferences

我不知道该怎么做了

似乎与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", "");

但它也不起作用。

问题出在重新启动应用程序之前我可以看到它们仍然存在。但是,一旦我重新启动 - 我最终会得到"" (空字符串)用于用户名和""密码。

非常感谢任何想法

4 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:1)

试试这个:

 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();

其中context是您应用的上下文:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


        context = this;

答案 2 :(得分:0)

我不确切知道发生了什么,但在我重新启动后,模拟器问题就消失了。

抱歉浪费你的时间

答案 3 :(得分:0)

您有两个选择:

  1. 在活动的生命周期内获取共享偏好值。

  2. .clear

  3. 之前致电.commit

    见我的回答:

    Android Persistent Checkable Menu in Custom Widget After Reboot Android