2013-03-06 181 views
0

我想读,并通过一类写SharedPreferences,但是当我在我的活动调用这个类它使应用程序崩溃/强制关闭SharedPreferences使应用程序强制关闭

如果CheckBox“记住电子邮件”被检查应用程序会记住电子邮件。

LoginActivity

public class LoginActivity extends Activity 
{ 
    private AppPreferences appPreferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login);   
     appPreferences = new AppPreferences(); // this makes the app crash 
     String email = appPreferences.getPreferenceString("email"); 
     // ... 

appPreferences

public class AppPreferences extends Activity 
{ 
    private SharedPreferences settings = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settings = this.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 
    public String getPreferenceString(String key) { 
     return settings.getString(key, DEFAULT_STRING); 
    } 
    public void setPreferenceString(String key, String value) { 
    editor.putString(key, (String) value); 
    } 
// ... 

我一直在寻找一些时间来解决这个问题,我从SO尝试了几种解决方案。我确实在onCreate方法中调用getSharedPreferences方法,所以不会成为问题。

我在做什么错?我不熟悉Java和Android开发,所以请充分描述示例。采用完全不同方法的其他解决方案也受到欢迎。提前致谢。

+0

请出示您的LogCat。你有什么样的错误? – hakiko 2013-03-06 16:08:37

+0

@Dediqated你试过我的解决方案..并仍然错误发布logcat。 – 2013-03-06 16:55:42

回答

1

因为您正在尝试创建一个扩展Activity类的对象。如果AppPreferences是非活动类,那么刚刚通过当前活动的上下文中单独的Java类分离SharedPreferences相关的代码为:

public class AppPreferences 
{ 
    private SharedPreferences settings = null; 
    Context context; 
    public AppPreferences(Context context){ 
    this.context=context; 
    settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 
//your code here.... 

}

现在通过使用AppPreferences构造活动上下文:

appPreferences = new AppPreferences(LoginActivity.this); 
String email = appPreferences.getPreferenceString("email"); 
+0

完美!感谢这工作,谢谢你的解释了。现在唯一的办法是,如果我强迫关闭应用程序,电子邮件不记得..你知道如何? – Dediqated 2013-03-07 08:23:56

1

不要在AppPreferences中扩展Activity类。并删除onCreate()方法。

这样做。

public class AppPreferences extends Activity 
{ 
    private SharedPreferences settings = null; 
    AppPreferences(Context context) { 
     settings = context.getSharedPreferences(LOGIN_CREDENTIALS, MODE_PRIVATE); 
    } 

    ...//Rest of your code. 

} 

在登录活动中。

appPreferences = new AppPreferences(this); 
+0

您的解决方案也可以运作,但我不知道如果我只使用首选 – Dediqated 2013-03-07 09:11:03