Android 사용자 세 션 관리 디자인
이제 당신 은 이러한 방법 을 완전히 버 리 고 코드 한 마디 로 로그 인 정보,사용자 정보 관 리 를 해결 할 수 있 습 니 다.전역 조작 을 실현 하 다.당신 의 프로그램 을 위해 결합 을 해제 합 니 다.
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 은 다음 과 같다.전체적인 사고방식 은 다음 과 같다.
Session Manager 클래스 를 추상 화하 면 실제 적 으로 Preferences Session Manager 가 이 추상 클래스 를 실현 하여 로 컬 Share Preferences 저장 을 합 니 다.
Config:실체 클래스 를 유지 하 는 class 는 JSON 직렬 화 를 통 해 로 컬 에 저장 합 니 다.이 클래스 는 일반적인 해석 역할 을 합 니 다.getUser()가 돌아 오 는 대상 은 이 클래스 에서 유지 합 니 다.결합 을 푸 는 역할 을 했 습 니 다.
ConfigBuild:빌 더 모드 로 편리 한 세 션 설정 을 제공 합 니 다.
SessionManager.getDefault(); 기본 값 은 Preferences Session Manager 의 인 스 턴 스 를 되 돌려 줍 니 다.
2.사용자 정의 SessionManger
Share Preferences 로 사용자 정 보 를 저장 하지 않 으 려 면 Session Manger 류 를 계승 하여 추상 적 인 방법 으로 사용자 정의 Session 관 리 를 실현 할 수 있 습 니 다.
사용자 정의 가 전역 에 접근 하고 싶다 면 AppSession Manger 클래스 를 추가 하여 하나의 방법 을 실현 하고 사용자 정의 실현 으로 돌아 갈 수 있 습 니 다.
Session Manger.getDefault()의 실현 을 참고 하면 됩 니 다.
3.Session Manger 코드 구현
/**
*
* 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
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 사용자 세 션 관리의 디자인 방안 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.