2014-11-21 34 views
0

在MainActivity.java我写访问SharedPreference和其他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); 

并将其设置为TextView的文本。但这不起作用。

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

+0

你需要'上下文'来访问其他Java类中的偏好对象。 – 2014-11-21 12:43:10

+1

传入'Context'(例如您的'Activity')作为参数并使用它来检索任何地方的共享首选项。 – Blacklight 2014-11-21 12:45:41

回答

0

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

要获得SharedPreferences实例你这样做:

1)在活动MainActivity

SharedPreferences pref = 
    getApplicationContext().getSharedPreferences("My_Pref" , 0); 

2)在活动Second

SharedPreferences pref = 
    getPreferences(0); 

第一种形式打开的首选项文件“My_Pref”,第二种形式打开一个以你的活动类命名的文件,即:“Second”。所以他们正在阅读和写作不同的文件。

我总是用这种形式来打开一个首选项文件:

SharedPreferences prefs = 
    PreferenceManager.getDefaultSharedPreferences(this); 
0

让你的活动范围

Context shrdContext= ActivityClass.getContextOfApplication(); 

现在通过上下文来获取你的另一个类

SharedPreferences myPrefs= PreferenceManager.getDefaultSharedPreferences(shrdContext); 
0

您共享偏好尝试这种方式

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

    } 

} 

检查this为更多详情

0

你有3种方式来访问的Android应用程序的首选项。

  • 你第一次使用的是 SharedPreferences pref = getApplicationContext().getSharedPreferences("My_Pref" , 0);是第一位的。有了这个,你可以读写一个自定义的共享首选项文件。在你的情况下,你的文件的名称将是My_Pref。 如果你想拥有不同的偏好differents域,这一个是有用的,因为它允许你创建许多与不同的名称共享的偏好。(例如:时区首选项,用户偏好)。

  • 第二个getPreferences(int)允许访问活动的首选项,并且与调用它的活动密切相关。创建的文件使用活动名称命名。在你的情况下第二

  • 第三种方法PreferenceManager.getDefaultSharedPreferences(Context)与第一种方法一样创建共享首选项文件,但是这次使用应用程序包名称命名该文件。如果您打算只有一个共享首选项文件,这是使用共享首选项的最佳方法。

在你最初的问题中,你在一个文件中写了一个数据,并试图读取另一个文件,这导致了一个错误。这就是为什么像Rob Meeuwisse写你必须使用PreferenceManager.getDefaultSharedPreferences(Context)