处理许多SharedPreferences的替代方案

时间:2016-05-18 15:50:08

标签: android sharedpreferences android-resources

我正在开发一款使用大量SharedPreferences的Android应用。我有几个SharedPreferences文件,我在整个应用程序中最多可以调用77个这些文件。有时我会使用:

static final String FileName= "SharedPreferencesFile";

在我的活动开始时然后:

SharedPreferences settings = getSharedPreferences(FileName, Context.MODE_PRIVATE);

每当我需要使用它们时。有时候,我只是直接引用文件,如下所示:

 SharedPreferences settings = getSharedPreferences("SharedPreferencesFile", Context.MODE_PRIVATE);

我现在正试图组织一些事情,所以我想了解不同的替代方案。我的问题是:

  1. 我应该定义一个" SharedPreferencesFile"对于我的应用程序中的所有变量或使用多个文件,因为我现在正在做什么?
  2. 我应该从我的应用资源文件夹中String FileName= "SharedPreferencesFile"中定义所有这些strings.xml,而不是将它们放在我的活动开头,只需将它们用作SharedPreferences settings = getSharedPreferences(R.string.SharedPreferencesFile, Context.MODE_PRIVATE);
  3. 我应该创建一个帮助程序类来处理Android Shared Preferences
  4. 中建议的每个活动的所有共享首选项调用

3 个答案:

答案 0 :(得分:2)

  

我应该为所有变量定义一个“SharedPreferencesFile”   在我的应用程序中或使用多个文件,因为我现在正在做什么?

如果您可以按逻辑方式对它们进行分类,请执行此操作。不要只是为了让它们以随机的方式分割成多个文件。它会在以后导致很多混乱

  

我应该在中定义所有这些String FileName =“SharedPreferencesFile”   我的app资源文件夹中的strings.xml而不是它们   在我的活动开始时,只是将它们用作   SharedPreferences设置=   getSharedPreferences(R.string.SharedPreferencesFile,   Context.MODE_PRIVATE);

将字符串资源提取到strings.xml总是好的。如果要添加翻译并确保不翻译名称,请务必小心。将它们标记为notranslate字符串资源。

  

我应该创建一个处理所有共享首选项的帮助程序类   按照Android共享偏好设置

中的建议调用每项活动

已有几种可用。这是我为简化SharedPreferences的使用而创建的。它是开源的,只需添加一个gradle依赖项即可使用 - docs

答案 1 :(得分:1)

创建单个单例类,它将处理所有您的首选项,理想情况下,您应该为每个首选项设置一个getter和setter,并且您将只执行:

Preferences.getInstance().getSomePref();

Preferences.getInstance().setSomePref(value);

答案 2 :(得分:1)

您可以随时为每次通话使用相同的SharedPreferences

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

构建一个包含String get(String key)void set(String key)的包装辅助类很容易。

这样的东西
class MyPrefs {

  static MyPrefs instance;

  static synchronized getInstance(Context ctx) {
     if(instance == null) {
        instance = PreferenceManager.getDefaultharedPreferences(ctx);
     }
     return instance;

  }

  //then getters and setters e.g.
  int getInt(String key, int defVal) {
     return Integer.valueOf(getString(key))
  }

  String get(String key) {
    return instance.getString(key);
  }
}