无法初始化SharedPreferences

时间:2017-06-23 16:36:18

标签: android sharedpreferences

我有一个类A这个类没有扩展或实现任何其他类。然后我有一个B类,这个类也没有扩展或实现任何其他类。

我的B类仅用于管理SharedPreferences

private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);

以下是B类中的问题方法:

public static void setCurrentUsersEmail(String email){
    sharedPreferences.edit().putString("userEmail",email).commit();
}

现在,A类是数据库管理员,需要将用户电子邮件存储在SharedPreferences中以供日后使用。我使用以下代码执行此操作:`

MySharedPrefs.setCurrentUsersEmail(currentUsersEmail);

然而,当我尝试在A类中运行代码时,我得到错误:

  

java.lang.ExceptionInInitializerError                                                                             在com.test.Android.MySharedPrefs.setCurrentUsersEmail(MySharedPrefs.java:0)

我真的很困惑为什么会发生这种情况我在搜索之后无法在线找到解决方案,我在其他活动中使用我的sharedPreferences类完全没问题。这是活动问题吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你可以这样做,在任何活动中,都不需要创建一个新方法:

保存:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("email", "YOURUSEREMAIL@.email");
 editor.commit();

要恢复:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("email", null);

你不能打电话给MyPrefs.aFunctionYouCreated()!!!

答案 1 :(得分:0)

您可以根据您的要求使用单身人士:

public class MyPrefs {

    private static MyPrefs myPrefs;
    private SharedPreferences sharedPreferences;

    private MyPrefs(Context context){

        sharedPreferences=context.getSharedPreferences("MyPREFERENCES", Context.MODE_PRIVATE);
    }

    public static MyPrefs getInstance(Context context){

        if(myPrefs==null)
            myPrefs=new MyPrefs(context);
        return myPrefs;
    }

    public void setCurrentUsersEmail(String email){

        sharedPreferences.edit().putString("userEmail",email).commit();
    }
}

您可以通过以下方式发送电子邮件:

MyPrefs.getInstance(context).setCurrentUsersEmail(currentUsersEmail);

您需要在第一时间传递上下文,以便在您的班级中引用sharedPreferences

立即从活动电话MyPrefs.getInstance(context)

然后你可以在没有上下文的情况下打电话

MyPrefs.getInstance().setCurrentUsersEmail(currentUsersEmail);

getInstance()方法:

public static MyPrefs getInstance(){

      if(myPrefs==null) throw new AssertionError("MyPrefs cannot be null");
      else 
      return myPrefs;
}