国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 用戶Session管理的設計方案

2019-10-22 18:20:37
字體:
來源:轉載
供稿:網友

相信大家都知道,每一個App都需要登錄,登錄信息都保存在本地文件中,然后我們就寫一堆的操作SharedPreferences的代碼了。

現在,你可以完全拋棄這種方法,一句代碼搞定登錄信息,用戶信息管理。實現全局操作。為你的程序解耦。

public void sessionDemo() {    // 獲取登錄信息    TokenInfo token = SessionManager.getDefault().getUserToken();    // 獲取用戶信息    UserInfo userInfo = SessionManager.getDefault().getUser();    // 是否登錄    boolean isLogin = SessionManager.getDefault().isLogin();    // 退出登錄    SessionManager.getDefault().clear();    // 登錄成功后,設置用戶信息    SessionManager.getDefault().setUser(new UserInfo());    // 登錄成功后,設置登錄信息    SessionManager.getDefault().setUserToken(new TokenInfo());    // 這句請在Application onCreate 的時候調用初始化配置信息    SessionManager.initWithConfig(        new SessionManager.ConfigBuilder()            .context(this)            .tokenClass(TokenInfo.class)            .userClass(UserInfo.class)            .build());    Log.i("rae", "登錄信息:" + token);    Log.i("rae", "用戶信息:" + userInfo);    Log.i("rae", "是否登錄:" + isLogin);  }

一、設計

抽象工廠模式,整體UML如下圖,整體思路為:

抽象出SessionManager類,實際還是PreferencesSessionManager實現了這個抽象類,進行本地SharePreferences保存。

android,用戶,session,管理

Config:負責維護實體類的class,用來做JSON序列化保存到本地的。這個類起到泛型解析的作用,getUser()返回的對象就由這個類去維護了。從而達到了解耦的作用。

ConfigBuild:構建者模式,提供方便的會話配置。

SessionManager.getDefault(); 默認返回的是PreferencesSessionManager的實例。

二、自定義SessionManger

如果不想用SharePreferences來保存用戶信息,也可以繼承SessionManger類實現抽象方法實現自定義的Session管理。

如果你的自定義也想全局訪問,那么可以新增一個AppSessionManger的類,來實現一個單例方法,返回你自定義的實現。

參考SessionManger.getDefault()的實現就可以了。

三、 SessionManger 代碼實現

/** * 會話管理 * Created by ChenRui on 2017/4/28 0028 17:27. */public abstract class SessionManager {  public static class Config {    Class<?> userTokenClass;    Class<?> userClass;    Context context;  }  public static class ConfigBuilder {    private final Config mConfig;    public ConfigBuilder() {      mConfig = new Config();    }    public ConfigBuilder tokenClass(Class<?> cls) {      mConfig.userTokenClass = cls;      return this;    }    public ConfigBuilder userClass(Class<?> cls) {      mConfig.userClass = cls;      return this;    }    public ConfigBuilder context(Context applicationContext) {      mConfig.context = applicationContext;      return this;    }    public Config build() {      return mConfig;    }  }  private static Config sConfig;  private static WeakReference<SessionManager> managerWeakReference;  /**   * 獲取默認的會話管理器,默認的為cookie 管理器。   * 使用之前請使用{@link #initWithConfig(Config)} 來進行初始化配置。   */  public static SessionManager getDefault() {    if (sConfig == null) {      Log.w("SessionManager", "session config from default");      sConfig = new ConfigBuilder().tokenClass(SessionToken.class).userClass(SessionUserInfo.class).build();    }    if (managerWeakReference == null || managerWeakReference.get() == null) {      synchronized (SessionManager.class) {        if (managerWeakReference == null || managerWeakReference.get() == null) {          managerWeakReference = new WeakReference<SessionManager>(new PreferencesSessionManager(sConfig));        }      }    }    return managerWeakReference.get();  }  /**   * 初始化會話管理器   */  public static void initWithConfig(Config config) {    if (sConfig != null) {      sConfig = null;      System.gc();    }    sConfig = config;  }  SessionManager() {  }  /**   * 是否登錄   */  public abstract boolean isLogin();  /**   * 清除會話信息,即退出登錄。   */  public abstract void clear();  /**   * 獲取當前登錄的用戶信息,在調用該方法之前請先調用{@link #isLogin()}來判斷是否登錄   */  public abstract <T> T getUser();  /**   * 設置當前用戶信息   */  public abstract <T> void setUser(T user);  /**   * 設置用戶授權信息   *   * @param token 授權信息   */  public abstract <T> void setUserToken(T token);  /**   * 獲取用戶授權信息   */  public abstract <T> T getUserToken();}

本文結束,非常簡單的實現,但是卻非常實用!

GitHub開源:https://github.com/raee/retrofit-ext.git

總結

以上所述是小編給大家介紹的Android 用戶Session管理的設計方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安龙县| 吉安县| 宜州市| 梅州市| 万盛区| 梨树县| 长子县| 英吉沙县| 香格里拉县| 山东| 盐亭县| 南皮县| 镇江市| 景德镇市| 分宜县| 古蔺县| 江城| 涿鹿县| 陵川县| 甘肃省| 蓬溪县| 游戏| 封丘县| 交口县| 耒阳市| 富裕县| 勐海县| 张家港市| 广东省| 乌什县| 五常市| 芜湖县| 灵宝市| 通海县| 黎川县| 新干县| 榕江县| 丰台区| 北票市| 阳朔县| 吉水县|