2013-03-03 18 views
8

忘记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", ""); 

但它也不起作用。

问题是我重新启动应用程序之前,我可以看到他们仍然存在。然而,只要我重新启动 - 我最终得到“”(空字符串)的用户名和“”密码。

任何想法,将不胜感激

回答

0

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

对不起,浪费你的时间

+0

同样的问题在这里,它重新启动后就像你的一样。真的很奇怪... – Victor 2015-07-23 19:02:08

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

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

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


     context = this; 
+0

你好,非常感谢你的评论。我在第一个示例中的表现相当,但恐怕它不起作用 – 2013-03-03 07:08:17

+0

请尝试使用您的活动而不是MyApplication。 – Gyonder 2013-03-03 07:12:16

+0

我正在调用getApplicationContext(),而不是从活动传递上下文。 – 2016-07-06 07:28:13

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) 
+0

您的示例在返回之前不会将'new MyApplication'保存到实例中,因此缓存从不发生。 – mikebabcock 2013-03-03 07:07:22

+0

谢谢,我会给它去一个 – 2013-03-03 07:12:39

+0

修复了mikebabcock指出的问题。谢谢! – agamov 2013-03-03 07:20:55