Android 无法初始化SharedReferences

Android 无法初始化SharedReferences,android,sharedpreferences,Android,Sharedpreferences,我有一个类a这个类不扩展或实现任何其他类。然后我有一个类B,这个类也没有扩展或实现任何其他类 我的B类仅用于管理SharedReference: private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 下面是B类中的问题方法: public static void setCurrentUsersEmail(String email)

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

我的B类仅用于管理
SharedReference

private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
下面是B类中的问题方法:

public static void setCurrentUsersEmail(String email){
    sharedPreferences.edit().putString("userEmail",email).commit();
}
现在,class A是一个数据库管理器,需要将用户的电子邮件存储在
SharedReferences
中以供以后使用。我使用以下代码执行此操作:`

MySharedPrefs.setCurrentUsersEmail(currentUsersEmail);
但是,当我尝试在类A中运行代码时,会出现以下错误:

java.lang.ExceptionInInitializeError 在com.test.Android.MySharedPrefs.setCurrentUsersMail(MySharedPrefs.java:0)上

我真的很困惑为什么会发生这种情况我在搜索后也无法在线找到解决方案,我在其他活动中使用了我的SharedReferences类。这是一个活动问题吗


非常感谢您的帮助。

您可以在任何活动中这样做,无需创建新方法:

要保存:

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

您可以根据需要使用singleton:

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);
您需要在第一时间传递上下文,以便在类中引用
SharedReferences

从活动调用
MyPrefs.getInstance(上下文)
立即

然后您可以在没有上下文的情况下调用

MyPrefs.getInstance().setCurrentUsersEmail(currentUsersEmail);
getInstance()
方法:

public static MyPrefs getInstance(){

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

如何在
getDefaultSharedReferences()
method中传递
mContext
,因此我从recyclerview适配器调用
setCurrentUsersMail(CurrentUsersMail)
。然后转到类A,在该类中检查数据库,然后调用SharedReferences。最初创建SharedReferences时,我从MainActivity调用一个方法以获取其上下文数据。我不认为上下文在这个例子中被发送,尽管谢谢你,这是有效的。您能解释一下为什么在这个实例中无法从MainActivity获取SharedReferences吗?首先,静态变量应该在static block中初始化,PreferenceManager->用于帮助从activities或XML创建首选项层次结构,SharedReferences->接口用于访问和修改返回的首选项数据通过getSharedReferences(字符串,int)。对于任何特定的首选项集,该类都有一个所有客户端共享的实例。
PreferenceManager
通常用于创建首选项活动或使用默认值从应用程序中的.xml文件加载某些首选项,并保存它自己对SharedReferences的引用
静态变量应在静态块中初始化
@MemoryManager如果静态块中出现异常,就像其他异常一样,您会得到一个
异常InInitializerRor