## (一).前言: 前面我们已经对于AndroidAnnotations使用Adapters和lists做了讲解,今天我们开始具体学习一下使用DI框架SharedPreferencesHelpers的使用,SharedPreferencesHelpers允许我们可以使用Android SharedPreferences. FastDev4Android框架项目地址:[https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android)  ## (二).定义preferences: 首先你需要使用创建一个@SharedPref注解的接口来进行定义SharedPreferences: ~~~ @SharedPref public interfaceMyPrefs { // The field name will have defaultvalue "John" @DefaultString("John") String name(); // The field age will have defaultvalue 42 @DefaultInt(42) int age(); // The field lastUpdated will havedefault value 0 long lastUpdated(); } ~~~ 基于这个规范,AndroidAnnotations会构建一个SharedPreferencesHelper并且会得到一个相同名字外加一个下划线的类。然后你可以通过@Pref注解生成一个实例。 【注】字段的类型必须是编译生成的类,还不是源类。这仅仅是AndroidAnnotations上面是这个情况。 ~~~ @EActivity public classMyActivity extends Activity { @Pref MyPrefs_ myPrefs; // ... } ~~~ 你可以如下进行使用: ~~~ // Simple edit myPrefs.name().put("John"); // Batch edit myPrefs.edit() .name() .put("John") .age() .put(42) .apply(); // Preferenceclearing: myPrefs.clear(); // Check if a valueexists: boolean nameExists =myPrefs.name().exists(); // Reading a value long lastUpdated =myPrefs.lastUpdated().get(); // Reading a valueand providing a fallback default value long now =System.currentTimeMillis(); long lastUpdated =myPrefs.lastUpdated().getOr(now); ~~~ ## (三).默认资源值: ~~~ @SharedPref public interfaceMyPrefs { @DefaultRes(R.string.defaultPrefName) String resourceName(); @DefaultRes // uses'R.string.defaultPrefAge' to set default value String defaultPrefAge(); } ~~~ ## (四).preferencekey: 自AndroidAnnotations3.1起,现在可以通过StringResource的id来作为preferencekey而不是方法的名称。这样但preferences是一个xml文件的时候,就可以使用stringresourcekeys.使用实例如下: ~~~ @SharedPref public interfaceMyPrefs { @DefaultString(value = "John",keyRes = R.string.myPrefKey) String name(); @DefaultRes(keyRes =R.string.myOtherPrefKey) String defaultPrefAge(); } ~~~ ## (五).作用域: 你可以通过设置下面值来控制访问权限: * ACTIVITY.使用MyActivity_MyPrefs命名共享preference * ACTIVITY_DEFAULT,默认权限MyActivity进行命名,Activity级别权限(可以通过activity.getPreferences()进行获取) * APPLICATION_DEFAULT,应用级别默认SharedPreference或者UNIQUE,使用MyPrefs命名。 因此如果需要定义一个应用级别的preference,这样我们可以在应用中都共享这个preferences,那么我们需要进行如下定义: ~~~ @SharedPref(value=SharedPref.Scope.UNIQUE) public interfaceMyPrefs { ... ~~~ ## (六).使用PreferencesActivity: Android PreferenceActvitiy和PreferenceFragment可以进行编辑我们上面注解生成的preferences。 ~~~ @SharedPref(SharedPref.Scope.UNIQUE) public interfaceMyPrefs { ... } public static StringPREF_NAME = "MyPrefs"; // in onCreate // Using yourMyPrefs values this.getPreferenceManager().setSharedPreferencesName(PREF_NAME); // Opening thelayout addPreferencesFromResource(R.xml.prefs); ~~~ 到此位置关于AndroidAnnotations最佳实践SharedPreferences已经讲解完,同时FastDev4Android项目已经添加配置了AndroidAnnotations框架,后期的框架项目中也会主要使用这个DI框架,.欢迎大家去Github站点进行clone或者下载浏览:[https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android) 同时欢迎大家star和fork整个开源快速开发框架项目~