访问其他Java类中的SharedReference和Editor对象

访问其他Java类中的SharedReference和Editor对象,java,android,sharedpreferences,Java,Android,Sharedpreferences,我在MainActivity.java中编写 SharedPreferences pref = getApplicationContext().getSharedPreferences("My_Pref" , 0); 然后我创建编辑器的对象,将数据放入其中 Editor edit = pref.edit(); 然后我把数据 edit.putString("1","Hello"); edit.commit(); / edit.apply(); 在Second.java中,我得到了首选项: S

我在MainActivity.java中编写

SharedPreferences pref = getApplicationContext().getSharedPreferences("My_Pref" , 0);
然后我创建编辑器的对象,将数据放入其中

Editor edit = pref.edit();
然后我把数据

edit.putString("1","Hello");
edit.commit(); / edit.apply();
在Second.java中,我得到了首选项:

SharedPreferences pref = getPreferences(0);
然后我尝试接收数据,如

pref.getString("1",null);
并将其设置为文本视图的文本。但这是行不通的


另外,如何正确访问其他java类中的首选项和编辑器?我无法理解这个概念。

了解您活动的背景

Context shrdContext= ActivityClass.getContextOfApplication();
现在传递上下文以获取另一个类中的共享首选项

SharedPreferences myPrefs= PreferenceManager.getDefaultSharedPreferences(shrdContext);
这样试试

public void saveToSharedPrefrence(Context context, String word) {

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    Editor editor = sharedPreferences.edit();

    if (sharedPreferences.contains("history")) {

        preExistRemove(word, context);

    } else {
        editor.putString("history", word.trim());
        editor.commit();

    }

}

查看更多详细信息

您正在写入和读取不同的首选项文件。使用相同的文件,它应该可以工作

要获取SharedReferences的实例,请执行以下操作:

1在活动main活动中:

2在activitySecond中:

第一个表单打开首选项文件My_Pref,第二个表单打开以活动类命名的文件,即:second。所以他们在不同的文件中读写

我总是使用此表单打开首选项文件:

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(this);

您有3种方式可以访问Android应用程序的首选项

你用的第一个是 SharedReferences pref=getApplicationContext.GetSharedReferencesMy_pref,0;这是第一个。使用此选项,您可以读取和写入自定义命名的共享首选项文件。在您的情况下,您的文件名将是My_Pref。 如果您想拥有不同的首选项-不同的域,此选项非常有用,因为它允许您使用不同的名称创建许多共享首选项。例如:时区首选项,用户首选项

第二个getPreferencesint允许访问活动的首选项,并与调用它的活动紧密绑定。创建的文件使用活动名称命名。在你的情况下,第二

第三个方法PreferenceManager.GetDefaultSharedReferencesContext与第一个方法一样创建一个共享首选项文件,但这次该文件使用应用程序包名称命名。如果您只想拥有一个共享首选项文件,这是使用共享首选项的最佳方法

在最初的问题中,您在一个文件中写入了数据,并试图在另一个文件中读取数据,这导致了一个错误。这就是为什么像Rob Meeuwisse write一样,您必须使用PreferenceManager。GetDefaultSharedPreferenceContext

您需要上下文来访问其他java类中的preferences对象。将上下文(例如,您的活动)作为参数传递,并使用它在任何地方检索共享的首选项。
SharedPreferences pref = 
    getPreferences(0);
SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(this);