登录的方式
1.账号登录
使用在app上注册的账号和密码进行登录,登录成功改变本地登录状态。
2.快捷登录
使用QQ、微信进行快捷登录,登录成功改变本地登录状态。
登录状态管理
使用状态模式进行登录状态管理,在用户登录和未登录的情况下,对于同一事件处理行为是不一样的。在一些依赖状态的操作,如果用户是登录状态,则进行直接操作,如果不是登录转态那就不能进行直接操作。减少if-else逻辑,增强代码的课拓展性和可维护性。
1.定义状态接口
在接口中定义依赖登录相关状态的操作
import android.content.Context;
/**
* Created by Shinlone on 2016/6/14.
* 定义依赖状态的操作,在这里主要有登录状态和未登录状态会拓展此接口
* 后期可以根据此接口实现一些其他转态,比如已经登录但限制操作的状态
*/
public interface UserState {
/**
* 购买操作
* @param context
*/
public void buy(Context context);
/**
*评论操作
* @param context
*/
public void comment(Context context);
/**添加其他与状态相关的接口**/
}
2.实现状态接口
实现UserState接口,分别构建登录状态和未登录状态
登录状态实现
import android.content.Context;
/**
* 已经登录状态
* Created by Shinlone on 2016/6/14.
*/
public class LoginedState implements UserState {
@Override
public void buy(Context context) {//可以正常购买
// 具体操作
}
@Override
public void comment(Context context) {//可以正常评论
// 具体操作
}
}
未登录状态实现
import android.content.Context;
/**
* Created by Shinlone on 2016/6/14.
*/
public class LogoutState implements UserState {
@Override
public void buy(Context context) {//注销状态下不能进行购买操作
// 具体操作,比如跳出登录
}
@Override
public void comment(Context context) {
}
}
状态管理实现
运用单例模式进行全局的状态管理,默认状态为未登录状态,并提供获取实例和切换状态的方法。
import android.content.Context;
/**
* Created by Shinlone on 2016/6/14.
* 用户状态管理
*/
public class LoginContext {
//默认状态为未登录状态
UserState mState = new LogoutState();
static LoginContext sLoginContext = new LoginContext();
private LoginContext() {
}
/**
* 获取操作实例
*
* @return
*/
public static LoginContext getsLoginContext() {
return sLoginContext;
}
/**
* 切换转态
*
* @param mState 传入状态
*/
public void setState(UserState mState) {
this.mState = mState;
}
public void buy(Context context) {//当前状态购物操作
mState.buy(context);
}
public void comment(Context context) {//当前状态的评论操作
mState.comment(context);
}
}
状态管理器使用
登录转态默认为未登录转态,当用户登录成功后先保存用户token及用户信息然后将状态切换至已经登录状态;在token超时的情况下先把状态切换至未登录状态。具体使用代码如下:
未登录状态
LoginContext.getsLoginContext().setState(new LogoutState());//切换至未登录转态,用户超时切换至此状态
LoginContext.getsLoginContext().buy(Activity.clsss);//执行购物操作不会直接购物,跳至登录界面
登录状态
LoginContext.getsLoginContext().setState(new LoginedState());//切换至登录状态,登录成功数据保存后切换至此状态
LoginContext.getsLoginContext().buy(Activity.clsss);//执行购物操作跳转至订单生成页面