【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
原创粉丝点击