实现思路
所需类
userHelp
在程序中需要显示/使用手机号时,能提供当前登录用户的手机号
由于一个app只能由一个用户进行使用,故这个类要使用单例模式。
public class UserHelp {
private static UserHelp instance;//null
private UserHelp(){
}
public static UserHelp getInstance(){
if (instance ==null){
synchronized (UserHelp.class){
if (instance == null){
instance = new UserHelp();
}
}
}
return instance;
}
private String phone;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
SPUtils
将使用sharedPreference的方法都放在里面,主要有三个方法
添加Token,验证Token是否存在,删除Token
**
* @ 功能处理所有有关SharedPreferences 操作
* Ctreate by barry on 2020/10/17.
*/
public class SPUtils {
/**
*当用户登陆时,利用 sharedPreference 来做标记(手机号)--保存手机号
*/
public static boolean saveUser(Context context,String phone){
boolean result = false;
SharedPreferences.Editor editor = context.getSharedPreferences(SPConstance.SP_NAME,Context.MODE_PRIVATE).edit();
editor.putString(SPConstance.SP_KEY,phone);
result = editor.commit();
return result;
}
/**
* 是否存在用户,他是作为之前登录过的标志,故只能存在一个值,有即可
*/
public static boolean isLoginUser(Context context){
boolean result =false;
SharedPreferences pref= context.getSharedPreferences(SPConstance.SP_NAME,Context.MODE_PRIVATE);
String phone =pref.getString(SPConstance.SP_KEY,"");
if (!TextUtils.isEmpty(phone)){
result =true;
// 如果有,直接给UserHelp 赋值
UserHelp.getInstance().setPhone(phone);
}
return result;
}
/**
* 登出时,去除标志
*/
public static boolean removeUser(Context context){
boolean result =false;
SharedPreferences.Editor editor= context.getSharedPreferences(SPConstance.SP_NAME,Context.MODE_PRIVATE).edit();
editor.remove(SPConstance.SP_KEY);
result = editor.commit();
return result;
}
}
逻辑呈现
1.用户登录
1.当用户登陆时,利用 sharedPreference 来做标记(手机号)–保存手机号
2.利用单例模式创建UserHelp --保存用户信息(一个app只有一个用户)
(两个时间点)
1.用户登入之后
2.用户打开应用程序时,检测SharedPreferences 中是否存在登录用户的标记如果有,直接给UserHelp 赋值,并且进入主页。如果不存在,则进入用户页面。
2.用户退出
1.删除掉SharedPreferences 保存的标记,回退到登录界面。
代码实现
1
当用户登陆时,利用 sharedPreference 来做标记(手机号)–保存手机号
1.保存标记
/**
* 保存标记
*/
private static boolean saveToken(Context context, String phone) {
boolean isSave = false;
isSave = SPUtils.saveUser(context, phone);
return isSave;
}
按下登录建,跳转到主界面之前要进行验证
```java
if (!UserUtils.validateLogin(this,phone,password)){
return;
}
// 跳转到主页面
Intent intent = new Intent( this,MainActivity.class);
startActivity(intent);
// 关闭当前页面
finish();
所以会在validateLogin 的函数内调用 保存标记的方法
1.当用户登陆时,利用 sharedPreference 来做标记(手机号)--保存手机号
if (!UserUtils.saveToken(context, phone)) {
toastShow(context, "系统错误");
return false;
}
2
利用单例模式创建UserHelp --保存用户信息(一个app只有一个用户)
利用单例模式创建UserHelp --保存用户信息(一个app只有一个用户)
UserHelp userHelp = UserHelp.getInstance();
userHelp.setPhone(phone);
3
2.用户打开应用程序时,检测SharedPreferences 中是否存在登录用户的标记
同时,在isLoginUser中完成对 userHelp的赋值
打开程序,进入的第一个界面是欢迎界面,故要在那个界面中调用 SPUtils 的 验证Token是否存在(isLoginUser),根据返回结果,判决是转入登入界面,还是主界面。
final boolean isLogUser=UserUtils.validateUserLogin(this);
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
Log.d("WelcomeActivity", "当前线程:"+ Thread.currentThread().getName());
// toMain();
if (isLogUser){
toMain();
}else {
toLogin();
}
}
},2*1000);
4
用户退出时,删除掉SharedPreferences 保存的标记,回退到登录界面。
if (!SPUtils.removeUser(context)){
toastShow(context, "系统错误");
return ;
}
Intent intent = new Intent(context, LoginActivity.class);
// 添加intent标识符,清理activity返回栈,并且新生成task栈
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
((Activity) context).overridePendingTransition(R.anim.open_enter, R.anim.open_exit);
596

被折叠的 条评论
为什么被折叠?



