一個Android平臺上基于SharePreferences的偏好存儲庫:Treasure

jopen 9年前發布 | 13K 次閱讀 Treasure Android開發 移動開發

Treasure是一個Android平臺上基于SharePreferences的偏好存儲庫,只需要定義接口,無需編寫實現。運行時0反射,不僅使用方便而且性能和原生寫法幾乎無差別。

使用方法

1、添加依賴

Gradle

compile 'com.baoyz.treasure:treasure:0.3.1' provided 'com.baoyz.treasure:treasure-compiler:0.3.1'
2、定義接口
@Preferences
public interface SimplePreferences {

    String getUsername();

    void setUsername(String username);

}

我們定義了一個interface,需要使用@Preferences注解進行聲明。然后可以定義一系列的get、set方法,用于獲取和設置值。方法名會作為存儲的key,例如getUsername()和setUsername()的key就是username,也就是通過setUsername()設置的value可以通過getUsername()獲取到,因為他們的key是一樣的。

3、實例化
SimplePreferences preferences = Treasure.get(context, SimplePreferences.class);
preferences.setUsername("Hello Treasure!");
preferences.getUsername(); // return "Hello Treasure!"

通過Treasure.get()方法可以獲取指定的Preferences對象,之后可以調用set方法設置值,通過對應的get方法獲取值。

高級用法

多文件

可以為一個Preferences生成多個文件,例如多賬號管理,不同賬號有不同Preferences。

Treasure.get(context, SimplePreferences.class, "id_one"); Treasure.get(context, SimplePreferences.class, "id_two");

Treasure提供了一個重載的get方法,可以傳入一個String類型的ID,不同ID返回的Preferences對象不同,保存的文件也不同。(感謝好基友zzz40500提出的建議)

默認值

@Default注解可以指定get方法的默認值。

@Default("Hello Treasure!") String getUsername();

@Default("false") boolean isLogin(); // default is 1 hour @Default("1000 * 60 * 60") long getTimeout();

@Default({"hello", "world", "!"}) Set<String> getStringSet();

如果沒有指定@Default那么默認值見下表。

返回值類型 默認值
int 0
float 0f
long 0l
boolean false
String null
Set<String> null

提交類型

設置值的默認提交類型是edit().apply(),如果想使用edit().commit()有三種方式。

1、全局
@Preferences(edit = Preferences.Edit.COMMIT) public interface SimplePreferences

全局指定提交方式之后,所有的set方法都會以commit()方法提交數據。

2、注解指定方法
@Commit void setUsername(String username);

使用@Commit注解只對當前方法有效。

3、指定方法返回boolean
boolean setUsername(String username);

無論上面兩種方式有沒有設置,只要set方法的返回值是boolean,那么這個方法就會以commit()方法提交,并且返回commit()的結果。

移除數據

@Remove void removeUsername();

@Remove void deleteTimeout();

使用@Remove注解修飾方法,調用方法移除對應key的數據。

清空數據

@Clear void clear();

可以聲明一個方法,使用@Clear注解修飾,那么調用這個方法就會清空整個Preferences的數據。

關于方法名

如果方法名以get、set、put、is、remove、delete開頭,那么會忽略這些前綴并且全部小寫作為key,如果不包含這些前綴,那么方法名全部小寫會作為key。

Proguard

Treasure運行時0反射,不需要添加Proguard配置。

項目主頁:http://www.baiduhome.net/lib/view/home/1447744871681

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!