> Android在线手册 > 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之最佳实践SharedPreferences(十七)

().前言:   

      前面我们已经对于AndroidAnnotations使用Adapterslists做了讲解,今天我们开始具体学习一下使用DI框架SharedPreferencesHelpers的使用,SharedPreferencesHelpers允许我们可以使用Android SharedPreferences.

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

().默认资源值:   


      AndroidAnnotations3.0,现在我们可以使用@DefaultRes来从Android Resources中注入一个默认值:


@SharedPref
public interfaceMyPrefs {
    @DefaultRes(R.string.defaultPrefName)
    String resourceName();
 
    @DefaultRes // uses'R.string.defaultPrefAge' to set default value
    String defaultPrefAge();
}

().preferencekey:   


    AndroidAnnotations3.1,现在可以通过StringResourceid来作为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 PreferenceActvitiyPreferenceFragment可以进行编辑我们上面注解生成的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 同时欢迎大家starfork整个开源快速开发框架项目~