2014-11-23 30 views
1

我需要在多个fragment文件中使用共享首选项(无法使用活动文件)我必须存储多个字符串行。如何在多个片段文件中使用共享首选项

如何在我的碎片中初始化shared preferences?我如何写/读?

我是否需要在我的主要活动中初始化它,还是必须在我的分段活动文件中初始化它?

的技巧,比如:

Context context = getActivity(); 
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE); 

...不起作用。

+0

你到底需要做什么?共享首选项旨在存储您重新启动应用程序时所需的数据。要在活动和片段之间共享数据,不建议使用此方法,尽管它有效。 – 2014-11-23 17:06:53

+0

但我需要它。也许你可以推荐一种不同的方法?我打算存储多个字符串行 – user2864772 2014-11-23 17:09:38

+0

您是否在调用将字符串放入sharedpreferences的编辑器实例中调用commit/apply? – 2014-11-23 17:38:26

回答

0

尝试封装你SharedPreferences在一些喜好类,与此类似:

class MyPrefs { 

    private static final String FILENAME = "prefs_filename"; 
    private static final String KEY_SOMETHING = "something"; 

    private SharedPreferences mPreferences; 

    public MyPrefs(Context context) { 
     mPreferences = new SharedPreferences(FILENAME, Context.MODE_PRIVATE); 
    } 

    public void setSomething(Something value) { 
     mPreferences.edit().put...(KEY_SOMETHING, value).commit(); 
    } 

    public Something getSomething() { 
     return mPreferences.getSomething(key, defaultValue); 
    } 
} 

这种方式,我们为我们的非易失性数据存储干净的API。 SharedPreferences太低级,暴露了太多细节,比如存储文件名,它迫使我们记住所有的键和值类型来提取任何数据。它可能在简单的情况下工作,但只要您存储的数据变得复杂,就会产生大量问题。尝试存储像用户配置文件几乎没有领域或简单的复杂数字,你会明白。使用原始的SharedPreferences会使你重构王室的痛苦。即使是简单的数据格式升级(如模式更新)也很快就会变得不可能,因为无法使用SharedPreferences

0

使用配置文件应存储在SQL数据库中,而不是共享首选项。由此得名。数据库存储数据,首选项存储首选项值。当你滥用API时,你不能抱怨它。

从SQLite文档开始