【oschina android源码分析】登陆和退出的设计
来源:互联网 发布:2016年癌症数据 权威 编辑:程序博客网 时间:2024/06/06 15:16
一.在登陆页面将用户的登陆信息序列化到本地
// 保存登录信息loginUserBean.getUser().setAccount(mUserName);loginUserBean.getUser().setPwd(mPassword);loginUserBean.getUser().setRememberMe(true);AppContext.getInstance().saveUserInfo(loginUserBean.getUser());
/** * 保存登录信息 * * @param user 用户信息 */ @SuppressWarnings("serial") public void saveUserInfo(final User user) { this.loginUid = user.getId(); this.login = true; setProperties(new Properties() { { setProperty("user.uid", String.valueOf(user.getId())); setProperty("user.name", user.getName()); setProperty("user.face", user.getPortrait());// 用户头像-文件名 setProperty("user.account", user.getAccount()); setProperty("user.pwd", CyptoUtils.encode("oschinaApp", user.getPwd())); setProperty("user.location", user.getLocation()); setProperty("user.followers", String.valueOf(user.getFollowers())); setProperty("user.fans", String.valueOf(user.getFans())); setProperty("user.score", String.valueOf(user.getScore())); setProperty("user.favoritecount", String.valueOf(user.getFavoritecount())); setProperty("user.gender", String.valueOf(user.getGender())); setProperty("user.isRememberMe", String.valueOf(user.isRememberMe()));// 是否记住我的信息 } }); }
二.在应用启动的时候,从本地取用户的信息,如果userId>0的话,则判断用户登陆了
private void initLogin() { User user = getLoginUser(); if (null != user && user.getId() > 0) { login = true; loginUid = user.getId(); } else { this.cleanLoginInfo(); } }
/** * 获得登录用户的信息 * * @return */ public User getLoginUser() { User user = new User(); user.setId(StringUtils.toInt(getProperty("user.uid"), 0)); user.setName(getProperty("user.name")); user.setPortrait(getProperty("user.face")); user.setAccount(getProperty("user.account")); user.setLocation(getProperty("user.location")); user.setFollowers(StringUtils.toInt(getProperty("user.followers"), 0)); user.setFans(StringUtils.toInt(getProperty("user.fans"), 0)); user.setScore(StringUtils.toInt(getProperty("user.score"), 0)); user.setFavoritecount(StringUtils.toInt( getProperty("user.favoritecount"), 0)); user.setRememberMe(StringUtils.toBool(getProperty("user.isRememberMe"))); user.setGender(getProperty("user.gender")); return user; }
三.在登陆页面注销账号,清除用户在本地的缓存信息,并发送广播
/** * 用户注销 */ public void Logout() { cleanLoginInfo(); ApiHttpClient.cleanCookie(); this.cleanCookie(); this.login = false; this.loginUid = 0; Intent intent = new Intent(Constants.INTENT_ACTION_LOGOUT); sendBroadcast(intent); }
/** * 清除登录信息 */ public void cleanLoginInfo() { this.loginUid = 0; this.login = false; removeProperty("user.uid", "user.name", "user.face", "user.location", "user.followers", "user.fans", "user.score", "user.isRememberMe", "user.gender", "user.favoritecount"); }
四.需要更新的页面注册注销广播,并更新页面
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { event_type = args.getInt(BUNDLE_KEY_EVENT_TYPE); } if (event_type == EventList.EVENT_LIST_TYPE_MY_EVENT) { IntentFilter filter = new IntentFilter( Constants.INTENT_ACTION_USER_CHANGE); filter.addAction(Constants.INTENT_ACTION_LOGOUT); getActivity().registerReceiver(mReceiver, filter); } }
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { requestData(true); } };
@Override protected void requestData(boolean refresh) { if (event_type == EventList.EVENT_LIST_TYPE_NEW_EVENT) { mCatalog = -1; super.requestData(refresh); return; } if (AppContext.getInstance().isLogin()) { mCatalog = AppContext.getInstance().getLoginUid(); super.requestData(refresh); } else { mErrorLayout.setErrorType(EmptyLayout.NETWORK_ERROR); mErrorLayout.setErrorMessage(getString(R.string.unlogin_tip)); } }
写在后面:
相比广播,如果项目引入eventbus的,使用eventbus的话,可能会让代码更优雅一些。
0 0
- 【oschina android源码分析】登陆和退出的设计
- 【oschina android源码分析】缓存的设计
- 【oschina android源码分析】下载更新新版本的设计
- 【oschina android源码分析】便笺系统的设计
- 【oschina android源码分析】聊天页面(私信)的设计
- 【oschina android源码分析】页面通知(站内信)的设计-android轮询方案
- 【oschina android源码分析】总结
- oschina的android源码分析学习(一)
- oschina的android源码分析学习-MainActivity
- 【oschina android源码分析】切换夜间模式的实现
- OSChina Android 客户端源码
- OSChina客户端源码学习(2)--缓存的设计
- oschina-app 的源码分析-主页面滑动切换
- 分析开源oschina客户端的源码(一)
- OSChina 的全局过滤器源码
- oschina源码分析:架构篇(草稿)
- oschina源码分析:实现篇(草稿)
- 退出登陆的总结
- Android Reference官方描述
- 2016"百度之星" - 初赛(Astar Round2A)1006 Gym Class(优先队列+拓扑排序)
- 第一章 JAVA入门(Android历史版本续1)
- Struts2+Hibernate+Spring 整合示例==》Spring整合Struts2简单示例==》Spring整合Hibernate简单示例
- 使用TraceView性能分析工具的方法
- 【oschina android源码分析】登陆和退出的设计
- C++之类型转换
- C语言中exit函数
- MongoDB服务无法启动,发生服务特定错误:100
- 详解Android动画之Frame Animation
- BZOJ 4554: [Tjoi2016&Heoi2016]游戏
- 【oschina android源码分析】页面通知(站内信)的设计-android轮询方案
- Android 编程下的 TraceView 简介及其案例实战
- 【oschina android源码分析】切换夜间模式的实现