7

我不知道该怎么办了

似乎在 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

4 回答 4

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)
于 2013-03-03T07:02:56.517 回答
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;
于 2013-03-03T07:00:50.493 回答
1

您有 2 个选项:

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

  2. 打电话.clear之前.commit

看我的回答:

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

于 2016-05-03T08:44:17.667 回答
0

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

抱歉浪费你的时间

于 2013-03-03T08:29:33.120 回答